In a large pot, melt the butter over medium heat. Add the chopped onion, carrots, and celery. Cook until the vegetables are softened, about 5-7 minutes.
Add the minced garlic and cook for an additional 1-2 minutes until fragrant.
Sprinkle the flour over the vegetables and stir to combine. Cook for 2-3 minutes to eliminate the raw flour taste, stirring constantly.
Gradually whisk in the chicken or vegetable broth, making sure there are no lumps. Bring the mixture to a simmer and let it cook for 5-7 minutes, or until slightly thickened.
Reduce the heat to low, and stir in the milk, shredded cheddar, Gruyere, and Parmesan cheeses. Continue stirring until the cheeses are completely melted and the soup is smooth and creamy.
Stir in the Dijon mustard, Worcestershire sauce, salt, pepper, paprika, and cayenne pepper. Adjust seasonings to taste.
Continue to simmer the soup on low heat for an additional 10-15 minutes, allowing the flavors to meld together.
Ladle the soup into bowls, and garnish with chopped chives or green onions.
Serve the cheese soup hot with crusty bread or croutons on the side.