Colbrelli launched the sprint early in a bid to secure the win before Sagan and Gaviria responded. The trio bumped their way to the finish but the Bahrain-Merida sprinter held his ground.
“It’s a fantastic day. It’s a very important victory for me and for the team. Thanks to my teammates, that did an amazing work in the final," Colbrelli said.
“I went from a long way out in the sprint, a long, long way out so that I could anticipate strong sprinters like Gaviria and Sagan. As I did at Paris-Nice last year.
"Yesterday I had a bad day and today I wanted to bounce back and I succeeded thanks to my teammates help too. I’m really happy”.
The rolling 182km stage from Oberstammheim to Gansingen was a speedy affair marked by a three-man breakaway containing Australian Calvin Watson (Aqua Blue Sort), Fabien Grellier (Direct Energie) and Filippo Zaccanti (Nippo-Vini Fantini).
The trio held its lead for much of the stage with Watson dropping off as Grellier and Zaccanti forged on. Chris Juul Jensen (Mitchelton-Scott) then jumped past Watson to bridge across to the leading pair before being caught with nine kilometres to go.
The stage was then animated by an attack from Sagan with Australian Michael Matthews (Sunweb) the first responder ahead of another attack by Arthur Vichot (Groupama-FDJ) inside the final kilometre before Colbrelli made his move.
Stage 4 takes the peloton into the Alps and 189km from Gansingen to Gstaad with BMC's Stefan Kung leading ahead of team-mates Greg van Avermaet and Richie Porte.
"It's hard to say if I can keep the jersey tomorrow, Kung said. "I know the climb to Gstaad but I have never done it as a final climb or really, really fast.
"What I do know is that I am feeling good and I have the impression that I am getting better from day to day. So, I am looking optimistically towards tomorrow's stage and we will see."