#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 100;
const int INF = 0x3f3f3f3f;
int p[MAX_SIZE + 10], pn;
bool isPrime[MAX_SIZE + 10];
int sn, val[3000000];
int l, r, lim;
int f[3000000];
bool ok[3000000];
void work(int cur, int prod) {
  while ((long long)prod * p[cur] <= r) {
    prod *= p[cur];
    val[sn++] = prod;
    for (int j = cur - 1; j >= 0; j--) work(j, prod);
  }
}
inline void update(int& a, int b) {
  if (b < a) a = b;
}
int main() {
  memset(isPrime, 1, sizeof(isPrime));
  for (int i = 2; i <= MAX_SIZE; i++) {
    if (isPrime[i]) p[pn++] = i;
    for (int j = 0; j < pn && p[j] * i <= MAX_SIZE; j++) {
      isPrime[p[j] * i] = false;
      if (i % p[j] == 0) break;
    }
  }
  scanf("%d%d%d", &l, &r, &lim);
  val[sn++] = 1;
  for (int i = pn - 1; i >= 0; i--) work(i, 1);
  sort(val, val + sn);
  memset(f, INF, sizeof(f));
  f[0] = 1;
  int ans = 0;
  for (int i = 0; i < sn && val[i] < l; i++) ok[i] = true;
  for (register int i = 1; i <= lim; i++) {
    int pos = 0;
    for (register int j = 0; j < sn; j++) {
      if (f[j] <= lim) {
        register long long t = (long long)val[j] * i;
        while (pos < sn && val[pos] != t) ++pos;
        if (!ok[j]) {
          ok[j] = true;
          ++ans;
        }
        ++f[j];
        if (pos < sn) update(f[pos], f[j]);
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
