The 27-year-old played in 65 games with Calgary last season after coming over in a trade from Carolina along with Tom Kostopoulos.
Babchuk had 11 goals and 24 assists and was a team-best plus-14 with the Flames. He added eight points in 17 games with Carolina.
Monday's deal will pay Babchuk $2.5 million a year.
A first-round pick by Chicago in 2002, Babchuk has played 250 career NHL regular-season games, with 34 goals and 62 assists.