You have 12 nights, that means 11 full days and parts of two more depending on when your flights are.
I would skip Zürich. It is a nice city, but you don't go to Switzerland for cities, you go there for mountains.
I would then try and make a circuit out of the rest: Geneva --> Lausanne --> Zermatt --> Berner Oberland --> Luzern and back to Geneva. By picking a good route, the journey is also sightseeing, and Lausanne --> Zermatt --> Berner Oberland --> Luzern are all scenic routes. You can split your time between the Berner Oberland (Grindelwald, Mürren, Wengen etc.) and Luzern.
I assume you are doing this all by rail. I always need a map for planning, to see where all the places are in relation to each other. A Swiss railways map is here: https://www.swisspasses.com/railpass/overviewmap_en.pdf
This is useful because it shows where the rail lines are and are not. In Switzerland you often cannot travel in straight lines (by road or rail) because the mountains get in the way.
As for travelling to Milan. This will be a long day trip. If you really want to go there, maybe you can spare a night. You can get from any station in Switzerland to Milan. The quickest journeys are from places that connect to the two north-south routes through the Alps. You could go Zermat --> Milan --> Berner Oberland (with a night in Milan). or Luzern - Milan and back.
Plan B: Geneva --> Lausanne --> Zermatt --> Milan --> Luzern --> Berner Oberland --> Geneva. That is a circuit, and you get to cross both routes through the Alps (Simplon and Gotthard).
For looking up train times and prices, use the Swiss Federal Railways website: www.sbb.ch Click on the small 'en' top centre to get English.