The 117.3km stage from Quinto to Olivone finished off with a tricky run-in towards the finish line with the last sharp curve coming 75 metres from the line.
"The tempo was high,” said Sagan (Tinkoff-Saxo). “Rafal Majka did a great job on the last hill and he held the group together for the sprint finish. Then it was my turn to launch and I'm happy to have won.”
The Slovak stage winner received valuable support from his team-mate, Majka, who set the pace at the front for the final 19 kilometres of the 117.3km stage.
“It was also difficult because the last curve seemed to be a left one so I went left. But it was to the right so I had to change my course,” said Sagan.
“I'm very happy with how the stage went and the work by the entire squad. Today's stage was difficult and on top of that it also rained.
“One group broke away with a lead of six minutes. Our team was leading out front on the last 40km and just before the last two hills the gap was only two minutes. They pulled very hard during the stage and Rafal Majka helped me a lot during the last two climbs.
“I can say that we won thanks to the teamwork we showed. I'm very happy with this victory but tomorrow is another day and we will see what happens”.
Sagan’s stage win also netted him 10 bonus seconds and he moves to third in the overall classification, five seconds behind Tom Dumoulin (Giant - Alpecin). Geraint Thomas (Sky) slipped from second to fourth.
Stage 4 takes riders on a 193.4km journey from Flims Laax Falera to Schwarzenbach. The nine-stage tour finishes in Bern with an individual time trial to decide the final placings.
Stage 3: 117.3km, Quinto - Olivone
1 Peter Sagan (SVK) Tinkoff-Saxo 3hr 35se
2 Daniel Moreno (ESP) Katusha 0:00:00
3 Thibaut Pinot (FRA) FDJ.fr
4 Julian Arredondo (COL) Trek Factory Racing
5 Tom Dumoulin (NED) Giant-Alpecin
6 Geraint Thomas (GBR) Sky
7 Jakob Fuglsang (DEN) Astana Pro Team
8 Esteban Chaves (COL) Orica-GreenEdge
9 Sergio Luis Henao (COL) Sky
10 Jose Joaquin Rojas (SPA) Movistar
1 Tom Dumoulin (NED) Giant-Alpecin 6hr 43min 12sec
2 Daniel Moreno (ESP) Katusha 0:00:05
3 Peter Sagan (SVK) Tinkoff-Saxo
4 Geraint Thomas (GBR) Sky 0:00:07
5 Thibaut Pinot (FRA) FDJ.fr 0:00:12
6 Jacob Fuglsang (DEN) Astana 0:00:14
7 Steve Morabito (SUI) FDJ.fr 0:00:15
8 Kristijan Durasek (CRO) Lampre-Merida 0:00:18
9 Bob Jungels (LUX) Trek Factory Racing 0:00:19
10 Simon Spilak (SLO) Katusha