Australia cut India's lead to 2-1 in the five-match series. The fourth match is on Sunday in Mohali.
Australia made 313-5 after an opening stand of 193 between Usman Khawaja, 104, and captain Aaron Finch, 93.
India was bowled out for 281 in the 49th over.
Only Kohli passed 35 in the chase.
Kohli reached his 41st hundred, and second in two matches, off 84 balls but after he was out at 219-6, bowled by legspinner Adam Zampa, India ran out of puff. Vijay Shankar, with 32 off 30 balls, was the second-highest scorer.
The Indians were stymied by fast bowlers Pat Cummins, 3-37, and Jhye Richardson, 3-37, and Zampa, 3-70.
India, unchanged from the second ODI win, got off to a bad start with Shikhar Dhawan out for 1 in the fourth over, caught at point off Richardson.
Cummins took two wickets in six balls as India was reduced to 27-3 in the seventh over. Rohit Sharma was dismissed lbw for 14 in the fifth over, and Ambati Rayudu bowled on 2.
Mahendra Singh Dhoni scored 26 off 42 balls at his home ground, trying to repair the innings by adding 59 runs off 77 balls with Kohli for the fourth wicket.
But the capacity crowd at JSCA Stadium was disappointed when, in the 20th over, Zampa bowled Dhoni in what could be his last international game at the ground.
Kohli reached 50 off 52 balls, and picked up the innings' reins as he added 88 runs off 75 balls with Kedar Jadhav (26) for the fifth wicket. The skipper accelerated, attacking Marcus Stoinis (0-39) in particular.
While Kohli scored another hundred, Zampa undermined India again by trapping Jadhav, who was out trying to sweep.
Kohli didn't slow his pace as he hit 16 fours and a six in the 95-ball knock. As India crossed 200 in the 36th over, it seemed he would singlehandedly win the game.
However, Zampa bowled Kohli in the 38th over, with 95 runs still needed off 75 balls. And India's threat evaporated with him.
"In terms of hitting the ball, it was one of my finest innings. I was feeling good since ball one," Kohli said.
"We pulled things back because at one stage it looked like we would be chasing 350. I was told to expect dew in the evening, but none of it happened."
Australia was put into bat and Finch and Khawaja produced a mammoth opening stand.
Khawaja scored his maiden ODI hundred, and Finch crossed 50 for the first time since June 2018.
They plundered Mohammed Shami, who needed regular treatment after being hit on the ankle off a Finch drive, and benefited from dubious India judgment and fielding. India wasted a video review against Finch for lbw in the second over, and Khawaja was on 17 when he was dropped by Dhawan off Ravindra Jadeja in the seventh over.
Finch and Khawaja brought up their combined 100 off 99 balls on the best batting surface of this series so far.
They were close to 200 runs together when Finch was out lbw off Yadav in the 32nd over.
Finch sought a video review, which showed the ball pitching away from its original spot. However, Hawk-Eye claimed to suffer a technical glitch, the right decision was eventually made, and Finch walked.
Khawaja reached his hundred off 107 balls, and was out shortly afterwards, chipping Shami straight to midwicket.
"My previous high score was 98, so it was good to get those extra two runs," Khawaja said. "We weren't sure what a good score is and the bowlers bowled beautifully (to set up the win)."
Glenn Maxwell was promoted up the order and made 47 off 31 balls before he was run out by a deflection. That slowed Australia's momentum, though it crossed 300 in the 49th over, the first time any team has done so in five ODIs at this ground.