I don't know how to do this mathematically, but you can do it programmatically: use the Sieve of Eratosthenes to generate factor counts from 1 to $10^{10}-1$. Note that $10^{10}$ is a bit over $2^{33}$ so you won't be able to store this in memory on a conventional computer (one byte per entry means you'd need 9.3 GB of RAM just for the array). There are some time-memory trade-offs here that could keep you off the disk, and there are ways to parallelize some of this, but it's still not something you can easily figure out on a commodity computer (unless there is a better method).
I ran a C program for 10-digit numbers and obtained the following counts:
01: 455052511
02: 1493776443
03: 2227121996
04: 2139236881
05: 1570678136
06: 977694273
07: 550454756
08: 291646797
09: 148930536
10: 74342563
11: 36585097
12: 17836903
13: 8641282
14: 4167745
15: 2002277
16: 959377
17: 458176
18: 218163
19: 103657
20: 49031
21: 23133
22: 10837
23: 5091
24: 2349
25: 1089
26: 499
27: 224
28: 102
29: 44
30: 19
31: 7
32: 3
33: 1
This table gives the counts for each $s_i$ for $1 \leq i \leq 33$ where integers are between 2 and $10^{10} - 1$. Prime multiplicities are counted, as you specified in a comment.
This ran in about 12 minutes on an x86 using 10 GB of RAM. So the answer to your question is that $s_3$ is largest. Code posted below.
#include
#include
#define MAX 10000000000 // sieve size
#define PPOWER 255 // marker for prime powers
// allocate MAX bytes of memory
unsigned char sieve[MAX];
// use # of factors as index, # of ints is value
unsigned long tally[100];
// sieve[] is initialized to all 0's; then for each i, sieve[i] will contain
// the number of prime factors (including multiplicity) for each i, except
// sieve[p^j] for prime p, j >1 will contain the special marker PPOWER.
// We do this to properly account for prime multiplicities.
main() {
unsigned long i, j;
int c;
for (i=2; i < MAX; i++) {
if (sieve[i] != PPOWER) {
// if composite, tally and continue
if (sieve[i] > 0) {
tally[sieve[i]]++;
continue;
}
// ok, i is prime; tally and mark all prime powers as PPOWER
// (takes some thought to see why we do this)
tally[1]++;
j = i*i;
c = 2;
while (j < MAX) {
sieve[j] = PPOWER;
tally[c]++;
j = j * i;
c++;
}
}
// now sieve as usual
for (j=i*2; j < MAX; j += i) {
if (sieve[j] != PPOWER)
sieve[j]++;
}
}
for (c=1; c < 100; c++)
if (tally[c]) printf("%.2d: %ld\n", c, tally[c]);
}