The trio had been part of a larger group before gradually easing away in the closing stages, their battle building into a thrilling climax.
On lap 16 alone Marquez traded position with Iannone five times in as many corners, with the Italian eventually coming out in front.
That was by no means the end of their scrap, but it was decisive in another fashion as it allowed Espargaro to build a small gap at the front.
That advantage would ultimately never be closed, although that owed as much to Iannone and Marquez cancelling each other out as it did to Espargaro raising his pace at the crucial moment.
Marquez and Iannone remained in touching distance of Espargaro, but equally continued trading blows until the very final lap.
The Spaniard eventually stole ahead after the pair swapped positions twice more through the first half of the track, before Iannone was denied a chance to respond when Scott Redding pounced to sneak into third.
The Briton, along with compatriot Bradley Smith, had closed in on the Marquez/Iannone battle in the final laps.
The order would remain that way, with Marquez and Redding completing the podium ahead of Iannone, Smith, Johann Zarco and poleman Simone Corsi, who also spent time at the front of the field.