Calhoun's deal includes a $5.5 million club option for 2023.
"We believe Kole will bring an outstanding veteran presence and example for our young players," general manager Chris Young said. "He has worked hard for everything he's achieved in his career and his daily effort is a model for everyone surrounding our club."
The 34-year-old Calhoun spent the past two seasons with the Arizona Diamondbacks after eight years with the Los Angeles Angels. He hit .235 with five home runs and 17 RBI over 51 games with Arizona this year, when he twice missed time on the injured list for left hamstring injuries.
He won a Gold Glove in right field for the Angels in 2015.