Cook pasta according to package directions. Drain. Set aside.
Toss Parmesan, cheddar and Swiss cheeses together. Reserve 1/2 cup of cheeses.
In a medium sized sauce pan, melt butter. Whisk in flour until smooth. Gradually add milk bring to a boil over medium high heat. Simmer for 3 minutes. Stir in onion powder, salt and pepper. Add the larger portion of cheeses. Stir until melted. Add sour cream and stir to incorporate.
Add pasta, spinach and ham to sauce and gently stir.
Pour in a greased 3 quart dish. Sprinkle with remaining cheese.
Bake at 350 degrees for 10 minutes Then broil until cheese is bubbly and golden brown, about 3 minutes.