For one, borders are difficult for migrants to cross: trains and coaches near borders are often checked for migrants, some borders are under police surveillance (like between France/Italy), etc.
Second, Dublin agreements force migrants to apply for asylum in the first EU country that they give their fingerprints in (ie the one where they have their first encounter with police). Most migrants have fingerprints in Italy, Bulgaria, Hungary, Greece, Spain, ie the countries on the outskirts of Europe. So migrants can’t just walk to the country of their choice and claim asylum, as they will be “deported”, as a rule, to a country they explicitly don’t want to be in (Italy had high acceptance rates until recently but can offer no work, Hungary is known for extreme racism and violence against migrants, etc.)
Your (b) is on point though. Italy has been asking for a fairer distribution of migrants among the Member States for some time, but the most powerful Member States like their South/Eastern European moat a lot