There are many optimizations to the basic Sieve of Eratosthenes you can make in C#, which becomes important for larger ranges such as billions to trillions, including the techniques of segmentation to reduce memory use and increase cache locality, multiprocessing, wheel factorization to reduce number of composite number culls, and sieving patterns of composites to reduce culling loop complexity, many of which I cover in my answer at: How do I implement the Sieve Of Eratosthenes using multithreaded C#?. These techniques reduce the number of calls per composite number to much less than the ratio of the ideal of one per composite (about a quarter of the range to Sieve to a billion) due to elimination of composites on the wheel factors, and the time is split evenly between the number of cores used.
There is an alternate means of filtering composites by an alternate pattern that speeds that up by about a factor of two, but I've not published that yet. It is faster due to reduced complexity without table lookups of the innermost culling loop(s).
Using another language such as C/C++, Rust, Nim, Haskell, etc. that produces more efficient machine code and allows major unrolling of the composite number culling loop(s) in addition to all of the other techniques is faster yet again, as it can reduce the time required per composite number culling to just above one clock cycle from about 10 clock cycles on a modern desktop CPU. Thus, the time required to cull the composite numbers to a range of a billion can be reduced to about 63 milliseconds on a 3.5 GHz/4 core CPU such as the Intel i7-2700 I used. If you want more than a count of the number of primed, the time will be increased of course.
The techniques used are similar to Kim Walich's open sourced C++ primesieve (https://primesieve.org) except for the new pattern which will make it just slightly faster due to increased wheel factorization and slightly less complexity, but you may find his source code difficult to read and understand (you may find my code difficult to understand as to the wheel factorization patterns unless you are somewhat of a mathematician). However, you should be able to run his program to see what is possible.
As pointed out, your program is not a true Sieve of Eratosthenes but rather an inefficient version of Trial by Division (when corrected). As you will likely not appreciate the complexity of my other solutions (walk before you can run), please have a look at the last of the C# unbounded sieves at:. rosettacode.org/Sieve_of_Eratosthenes#Unbounded, which is somewhat functionally the same as your code but uses the segmented Sieve of Eratosthenes with bit packing (one bit per odd trial number) using odds only numbers as 2 is the only even prime.
Any of the programs to which I have linked will be many many times faster than your program even when fixed other than perhaps for very small ranges.