Local riders Michael Albasini (Orica-GreenEdge) and Silvan Dillier (BMC) attacked on the final lap of the finishing circuit, forcing Sagan to launch himself from the peloton to catch them.
>> Save up to 35% with a magazine subscription. Enjoy the luxury of home delivery and never miss an issue <<
Some teething problems in the trio towards the end of the stage almost saw them caught by the peloton, but Sagan sprinted past Albasini to claim his 13th Tour de Suisse stage win and the overall lead.
The eight man break was allowed up the road, even though it contained Dillier who sat just 13 seconds off the race lead after the first two stages.
Local rider Michael Albasini moved off the front of the peloton with 20km to go to catch the breakaway riders, receiving support from teammate Mat Hayman, who dropped back to pace him onto the group.
Dillier remained the dangerous rider in the group as the virtual leader on the road, but Albasini continued to liven things up with a move off the front again. Dillier followed his countryman, with Katusha’s Sven Erik Bystrom also trying to cling on, but dropping off.
Lotto-Soudal used all their resources to try and keep Jurgen Roelandts in the leader’s jersey, and even Sagan had a turn on the front to bring back the breakaway duo.
Sagan left the peloton for dead as he stormed to the top of the climb in the chase, haring down the descent after the two Swiss riders, catching them at the 10km mark.
Albasini and Dillier were keen to work with Sagan with the stage win and possible yellow jersey on the line for the winner, but their lead was reducing by the kilometre.
Sagan wasn’t going to hang around to be caught, though, launching another attack and therefore losing the support of the two Swiss riders, who then refused to work with him.
Albasini laid on the power under the lanterne rouge but the peloton bore down on them with Lotto-Soudal at the head for Roelandts.
But they couldn’t catch the trio, with Albasini opening up the sprint. The ending was quite inevitable, with Sagan sprinting round the outside to take the time bonus and the yellow leader’s jersey.
British GC contender Geraint Thomas (Sky) finished in 13th place in the main peloton and moved up to ninth overall.
Tour de Suisse stage three, Grosswangen to Rheinfelden (192.6km)
1. Peter Sagan (Svk) Tinkoff, 4-31-17
2. Michael Albasini (Swi) Orica-GreenEdge, st
3. Silvan Dillier (Swi) BMC, st
4. Maximiliano Richeze (Arg) Etixx-Quick Step, at 3s
5. Jurgen Roelandts (Bel) Lotto-Soudal, st
6. Jhonatan Restrepo (Col) Katusha, st
7. Michael Matthews (Aus) Orica-GreenEdge, st
8. Rui Costa (Por) Lampre-Merida, st
9. Simon Geschke (Ger) Giant-Alpecin, st
10. Chris Juul Jensen (Den) Orica-GreenEdge, st
Overall standings after stage three
1. Peter Sagan (Svk) Tinkoff, 9-14-13
2. Jurgen Roelandts (Bel) Lotto-Soudal, at 3s
3. Silvan Dillier (Swi) BMC, st
4. Ion Izagirre (Esp) Movistar, at 13s
5. Tim Wellens (Bel) Lotto-Soudal, at 14s
6. Gokra Izagirre (Esp) Movistar, at 17s
7. Wilco Kelderman (Ned) LottoNL-Jumbo, st
8. Michael Matthews (Aus) Orica-GreenEdge, at 18s
9. Geraint Thomas (GBr) Team Sky, at 19s
10. Simon Geschke (Ger) Giant-Alpecin, at 20s