India restricted Sri Lanka to 251, and survived a testy opening spell from Lasith Malinga - who cleaned up the in-form Gautam Gambhir in the first over for a duck - to chase the target down with 46 balls to spare.
Sri Lanka made all the right moves as they rid themselves of Virender Sehwag (34) and extended Rohit Sharma’s wretched run, and when Tiwary was trapped in front by Jeevan Mendis, the match could have swung either way.
Kohli (128 n.o.) and Suresh Raina (58 n.o.) came together at 109 for four in the 24th over, a period during which Sri Lanka looked set to tighten the screws on India’s middle order.
But the two, after a cautious beginning, added 146 in 18.4 overs in an unbeaten fifth-wicket stand, which concluded in a frenzy as 65 runs came off the last five overs.
Kohli started slowly, reaching his fifty in 65 balls, but accelerated mercilessly as he neared his century. He took just 41 more balls to get to his 13th ODI hundred – his fourth in six matches against Sri Lanka, but gained from a couple of reprieves, once when he had made 22 and again when he had just reached his hundred.
Raina too was dropped when he had scored 19; the lapses costing Sri Lanka dear and handing India their 400th ODI win on a platter.
The victory was set up by a most unlikely bowler – Tiwary (four for 61) who scythed through Lanka with his guileless leg breaks after the hosts elected to bat.
India opted to include Tiwary but at the expense of an unlikely Sharma – Rahul. This meant that Tiwary, who had scored a century in his last ODI, and the totally out-of-sorts Rohit Sharma, both took the field.
Dhoni thus went for a relatively weakened bowling attack on a batting-friendly track, but was vindicated when his part-time bowlers (who bowled 22 overs among themselves) restricted Sri Lanka to 251.
Tiwary claimed four wickets, including those of Dinesh Chandimal and Angelo Mathews, stalling the hosts after they had got off to a watchful but safe start through a 91-run opening stand between Tillakaratne Dilshan and Upul Tharanga.
Tiwary, Sehwag and Rohit Sharma bowled with such purpose that spearhead Zaheer Khan was restricted to just six overs. It was Zaheer though who spelled trouble initially for the Lanka openers.
On a slow pitch, both batsmen strove to get a move on. Dilshan sparkled for seven boundaries, before top-edging a largely ineffective Ashok Dinda to M.S. Dhoni behind the stumps in the 19th over.
Both Powerplays were utilized within the first 20 overs and soon after Dilshan’s exit, Tharanga followed
Dinesh Chandimal and Lahiru Thirimanne added 50 for the third wicket mostly against the innocuous presentations of Ashwin and Sehwag, haring between the wickets and eschewing risks. The two also gained from minor lapses in the field, the most major of which was the simple catch that Kohli put down.
Tiwary was introduced in 32nd over, and immediately had an impact. Apparently devoid of any threat, the part-timer unleashed a long hop that Chandimal spanked straight to deep-square leg.
Soon after, new man Mahela Jayawardene botched an attempted sweep against Sehwag and was caught by Dhoni. Tiwary then bowled a maiden to Angelo Mathews – tying him down with such effect that when the Lankan all-rounder sought to open up, he only managed to hole out, exiting for a 34-ball 14.
Tiwary struck against when he bowled Jeevan Mendis as the batsmen missed a reverse sweep, and in the same over Thisara Perera drilled one to deep midwicket.
Thirimanne, who had soldiered on for a boundary-less 69-ball 47, finally rampaged down the track to Ashwin and was bowled, leaving Sri Lanka at 219 for 8 at the end of 47 overs.
If India were hoping to run through the rest of the tail, they were mistaken. Tiwary finally got the stick in the last over of the innings, conceding 18 including a six apiece by Malinga and Rangana Herath as the hosts surged past the 250 mark.