Sieve of Eratosthenes to print prime numbers in a given range
This is NO Sieve of Eratosthenes. Can you see any division in this algorithm description???

What you're doing is trial division. Worsened by


even checking things like "does 100 divide 2?"
using a list which does not allow efficient removal
using Integer rather than int


The complexity is something like \$O(n^3)\$ as there are 3 nested loops: 2 in your code and 1 in numbers.remove.

The complexity should be \$O(n^\frac32)\$ which comes from using an "indicator array"(*) and iterating up to \$\sqrt n\$ only.

(*) It tracks for each int the information if it's a prime or not. It can be implemented e.g. as a boolean[] or a BitSet. The point is that all you need is an indexed access, no search, no elements shifting....