Hamilton led the majority of the race, but had a Lotus on his tail nearly all of the way.
Button (McLaren) could not match Hamilton and Grosjean's early pace, so the McLaren and Lotus pulled away in a two-car lead fight.
Hamilton had it under control, although Grosjean did ramp up the pressure for a while in the middle stint of their two-stop strategies when he was on softs and the Briton had medium Pirellis.
When Button made an early second of three stops, Vettel was free to start catching the leaders too, but in the end it was Raikkonen who emerged almost from nowhere to become Hamilton's main challenger.
Raikkonen had been sixth in the opening stint, then passed Fernando Alonso's Ferrari in the first stops. His strong late-stint pace on a long run on softs in his next stint then allowed him to lead for a spell and vault from fifth to second, firmly resisting team-mate Grosjean as he emerged from his final stop.
Hamilton and Raikkonen were then tied together until the flag, but there was nothing the Lotus could do to pass the McLaren.
Grosjean held on to third ahead of Vettel, who made a third pitstop without losing a place and charged back to attack the Lotus on fresh softs, to no avail.
Alonso calmly protected his championship lead on a tough day for Ferrari, finishing fifth. For a while it looked like main title rival Mark Webber would trim a little from Alonso's cushion. The Australian jumped from 11th to seventh on lap one, then got ahead of Alonso at the second stops. But making a third tyre stop cost Webber and he fell to eighth.
Button's three-stop plan was also unsuccessful, as his second stop left him trapped behind Bruno Senna for a spell. He got back in front of the Brazilian in the final tyre changes then chased Alonso home in sixth.
Senna resisted Webber for seventh, delivering one of his best drives of the season on a day when his Williams team-mate Pastor Maldonado lost ground at the start then received a drive-through penalty for barging Paul di Resta's Force India aside in one of the race's few concerted passing attempts.
Felipe Massa was ninth - four places but just a few seconds behind team-mate Alonso. Nico Rosberg salvaged a point for Mercedes as his team-mate Michael Schumacher endured one of his most depressing races in Formula 1. The seven-time champion was left on the grid in an aborted initial start, joined the race from the pits, received a pitlane speeding penalty, then retired from 18th late on.