#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define mod 1000000007
#define f(i, a, b) for (ll i = a; i < b; i++)
#define IOS                                                                    \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define ii pair<ll, ll>
#define vii vector<ii>
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define MAX 1e9

ll modpow(ll base, ll exp, ll modulus) {
  base %= modulus;
  ll result = 1;
  while (exp > 0) {
    if (exp & 1)
      result = (result * base) % modulus;
    base = (base * base) % modulus;
    exp >>= 1;
  }
  return result;
}
const ld pi = acos(-1);

int main() {
  IOS;
  ll n;
  cin >> n;
  ll cnt = 0;
  f(i, 1, n) {
    ll num = n - i;
    ll sq = sqrt(num);
    f(j, 1, sq + 1) {
      if (num % j == 0) {
        cnt += 2;
        if (j == num / j)
          cnt--;
      }
    }
  }
  cout << cnt;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define mod 1000000007
#define f(i, a, b) for (ll i = a; i < b; i++)
#define IOS                                                                    \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define ii pair<ll, ll>
#define vii vector<ii>
#define F first
#define S second
#define pb push_back
#define mp make_pair

ll modpow(ll base, ll exp, ll modulus) {
  base %= modulus;
  ll result = 1;
  while (exp > 0) {
    if (exp & 1)
      result = (result * base) % modulus;
    base = (base * base) % modulus;
    exp >>= 1;
  }
  return result;
}
const ld pi = acos(-1);

const int MAX = 1000001;

// array to store prime factors
int factor[MAX] = {0};

void generatePrimeFactors() {
  factor[1] = 1;

  // Initializes all the positions with their value.
  for (int i = 2; i < MAX; i++)
    factor[i] = i;

  // Initializes all multiples of 2 with 2
  for (int i = 4; i < MAX; i += 2)
    factor[i] = 2;

  // A modified version of Sieve of Eratosthenes to
  // store the smallest prime factor that divides
  // every number.
  for (int i = 3; i * i < MAX; i++) {
    // check if it has no prime factor.
    if (factor[i] == i) {
      // Initializes of j starting from i*i
      for (int j = i * i; j < MAX; j += i) {
        // if it has no prime factor before, then
        // stores the smallest prime divisor
        if (factor[j] == j)
          factor[j] = i;
      }
    }
  }
}

int calculateNoOFactors(int n) {
  if (n == 1)
    return 1;

  int ans = 1;

  // stores the smallest prime number
  // that divides n
  int dup = factor[n];

  // stores the count of number of times
  // a prime number divides n.
  int c = 1;

  // reduces to the next number after prime
  // factorization of n
  int j = n / factor[n];

  // false when prime factorization is done
  while (j != 1) {
    // if the same prime number is dividing n,
    // then we increase the count
    if (factor[j] == dup)
      c += 1;

    /* if its a new prime factor that is factorizing n,
       then we again set c=1 and change dup to the new
       prime factor, and apply the formula explained
       above. */
    else {
      dup = factor[j];
      ans = ans * (c + 1);
      c = 1;
    }

    // prime factorizes a number
    j = j / factor[j];
  }

  // for the last prime factor
  ans = ans * (c + 1);

  return ans;
}

int main() {
  IOS;
  generatePrimeFactors();
  int n;
  cin >> n;
  ll cnt = 0;
  f(i, 1, n) {
    int num = n - i;
    cnt += calculateNoOFactors(num);
  }
  cout << cnt;
  return 0;
}


// g++ -std=c++17 -Wshadow -Wall -fsanitize=address -fsanitize=undefined
// -D_GLIBCXX_DEBUG -g PROGRAM -o OUTPUT -DLOCAL -lasan -lubsan
#include <bits/stdc++.h>

#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define eps 1e-6
#define pi 3.141592653589793
using namespace std;

typedef vector<int> VII;
typedef vector<ll> VLL;
typedef pair<int, int> PII;
typedef vector<pair<int, int>> VPII;
typedef vector<pair<int, PII>> VPPI;
const int MOD = 1e9 + 7;
const int INF = 1e9;

inline ll modulo(ll a, ll m) { return (a % m + m) % m; }

inline ll modInverse(ll a, ll m) {
  assert(__gcd(a, m) == 1);
  ll m0 = m;
  ll y = 0, x = 1;

  if (m == 1)
    return 0;

  while (a > 1) {
    ll q = a / m;
    ll t = m;

    m = a % m, a = t;
    t = y;

    y = x - q * y;
    x = t;
  }

  if (x < 0)
    x += m0;

  return x;
}

inline ll modPow(ll x, ll y, ll m) { // x^y % m
  if (y == 0)
    return 1LL;
  else if (y == 1)
    return x;
  else {
    ll ans = modPow(x, y / 2, m) % m;
    if (y & 1) {
      return (((ans * ans) % m) * x) % m;
    } else {
      return (ans * ans) % m;
    }
  }
}

vector<string> split(char d, string s) {
  stringstream ss(s);
  string t;
  vector<string> words;
  while (getline(ss, t, d)) {
    words.pb(t);
  }

  return words;
}

int main(int argc, char *argv[]) {

  ios::sync_with_stdio(false);
  cin.tie(NULL);

  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i < n; ++i) {
    for (int j = 1; j * j <= i; ++j) {
      if (i % j == 0) {
        ans++;
        if (j * j != i)
          ans++;
      }
    }
  }

  cout << ans;

  return 0;
}

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <math.h>
using namespace std;
#define endl '\\n'
#define pi pair<int, int>

typedef __uint128_t u128;

const u128 mod = 1e9 + 7;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);

  long long n;
  cin >> n;

  long long res = 0;
  for (int i = 1; i < n; ++i) {
    res += ((n - 1) / i);
  }
  cout << res;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int answer = 0;
  int N;
  cin >> N;
  int a = 1;
  int b = 1;
  int c = 1;
  while (a < N) {
    while (a * b + c <= N) {
      if (a * b + c == N) {
        answer++;
        c = 1;
        break;
      } else {
        c++;
      }
    }
    if (a * b < N) {
      b++;
    } else {
      b = 1;
      a++;
    }
  }
  cout << answer << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int answer = 0;
  int N;
  cin >> N;
  int a = 1;
  int b = 1;
  int c = 1;
  while (a < N) {
    if (a * b < N) {
      answer++;
    }
    if (a * b < N) {
      b++;
    } else {
      b = 1;
      a++;
    }
  }
  cout << answer << endl;
}


#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
const int mod = 1e9 + 7;
int main() {
  long long n;
  cin >> n;

  int x;
  long long k = 0;
  for (x = 1; x <= n - 1; x++) {
    long long res = 1;
    long long z = x;
    unordered_map<int, int> primes;
    for (int i = 2; i <= z / i; i++) {

      while (z % i == 0) {
        z /= i;
        primes[i]++;
      }
    }
    if (z > 1)
      primes[z]++;

    for (auto prime : primes)
      res = res * (prime.second + 1) % mod;
    k += res;
  }

  cout << k << endl;
}

#include <iostream>
using namespace std;
int main() {
  long long n;
  cin >> n;
  n--;
  long long ans = 0;
  for (int i = 1; i <= n; i++) /*求从1到n约数个数的和*/
  {
    ans += n / i;
  }
  cout << ans << endl;
}


#include <iostream>
using namespace std;
int main() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int c = 1; c < n; c++) {
    for (int a = 1; a * a <= n - c; a++) {
      if ((n - c) % a == 0) {
        if ((n - c) / a != a) {
          cnt += 2;
        } else {
          cnt++;
        }
      }
    }
  }
  cout << cnt << endl;
}

#include <iostream>
using namespace std;
int main() {
  int n;
  cin >> n;
  int cnt = 0;
  for (int a = 1; a <= n; a++) {
    cnt += n / a;
    if (n % a == 0)
      cnt--;
  }
  cout << cnt << endl;
}


#include <bits/stdc++.h>
#include <cstdlib>
#include <queue>
#include <vector>
using namespace std;
#define REP(i, n) for (int i = 0; i < n; i++)
#define STEP(i, n, step) for (int i = 0; i < n; i += step)
#define RANGE(n) for (int _ = 0; _ < n; _++)
#define FOR(i, m, n) for (int i = m; i < n; i++)

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}

const long long INF = 1LL << 60;
const int INT_INF = 1 << 29;

const int MAX = 100010;

void solve() {
  int N;
  cin >> N;
  int counter = 0;
  // cout << pow(N,.5) << endl;
  REP(i, N) {
    for (int d = 1; d <= pow(i, .5); d++) {
      if (i % d == 0) {
        if (i / d == d)
          counter++;
        else
          counter += 2;
      }
    }
  }
  cout << counter << endl;
  return;
}

int main() {
  solve();
  return 0;
}

#include <bits/stdc++.h>
#include <cstdlib>
#include <queue>
#include <vector>
using namespace std;
#define REP(i, n) for (int i = 0; i < n; i++)
#define STEP(i, n, step) for (int i = 0; i < n; i += step)
#define RANGE(n) for (int _ = 0; _ < n; _++)
#define FOR(i, m, n) for (int i = m; i < n; i++)

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}

const long long INF = 1LL << 60;
const int INT_INF = 1 << 29;

const int MAX = 100010;

void solve() {
  int N;
  cin >> N;
  int counter = 0;
  // cout << pow(N,.5) << endl;
  REP(i, N) {
    for (int d = 1; d * d <= i; d++) {
      if (i % d == 0) {
        if (i / d == d)
          counter++;
        else
          counter += 2;
      }
    }
  }
  cout << counter << endl;
  return;
}

int main() {
  solve();
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;
  int sum = 1;

  for (int i = 2; i < N; i++) {
    for (int j = 1; j <= i; j++) {
      if (i % j == 0) {
        sum++;
      }
    }
  }

  cout << sum << endl;
}

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;
  int x = 0;

  for (int a = 1; a <= N - 1; a++) {
    x += (N - 1) / a;
  }

  cout << x << endl;
}


#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <vector>
using namespace std;
using Int = int64_t;
using P = pair<Int, Int>;
const Int INF = 1 << 30;
const Int MOD = (Int)1e9 + 7;
const Int MAX_N = (Int)1e5 + 5;
#define debug(x) cout << #x << ": " << x << endl
#define debug2(x, y) cout << #x << ": " << x << ", " << #y << ": " << y << endl;
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); i++)
    os << v[i] << (i + 1 != v.size() ? " " : "");
  return os;
}

template <typename type> vector<type> divisor(type n) {
  vector<type> res;
  for (type i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      res.push_back(i);
      if (i * i != n)
        res.push_back(n / i);
    }
  }
  return res;
}

void solve() {
  Int n;
  cin >> n;
  Int ans = 0;
  for (Int c = 1; c <= n; c++) {
    vector<Int> divisors = divisor(n - c);
    ans += (Int)divisors.size();
  }
  cout << ans << "\\n";
}

signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  solve();
  return 0;
}

#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <vector>
using namespace std;
using Int = int64_t;
using P = pair<Int, Int>;
const Int INF = 1 << 30;
const Int MOD = (Int)1e9 + 7;
const Int MAX_N = (Int)1e5 + 5;
#define debug(x) cout << #x << ": " << x << endl
#define debug2(x, y) cout << #x << ": " << x << ", " << #y << ": " << y << endl;
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); i++)
    os << v[i] << (i + 1 != v.size() ? " " : "");
  return os;
}

template <typename type> vector<type> divisor(type n) {
  vector<type> res;
  for (type i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      res.push_back(i);
      if (i * i != n)
        res.push_back(n / i);
    }
  }
  return res;
}
map<Int, Int> prime_factor(Int N, const vector<Int> &is_prime) {
  map<Int, Int> result;
  while (N > 1) {
    result[is_prime[N]]++;
    N = N / is_prime[N];
  }
  return result;
}

vector<Int> eratosthenes(const Int &N) {
  vector<Int> is_prime(N + 1);
  for (int i = 0; i < is_prime.size(); i++)
    is_prime[i] = i;
  is_prime[1] = 0;

  for (Int i = 2; i * i <= N; i++) {
    if (is_prime[i] != i)
      continue;
    for (Int j = 2 * i; j <= N; j += i) {
      is_prime[j] = min(is_prime[j], i);
    }
  }
  return is_prime;
}

void solve() {
  Int n;
  cin >> n;
  vector<Int> is_prime = eratosthenes(n);
  Int ans = 0;
  for (Int c = 1; c <= n; c++) {
    map<Int, Int> mp = prime_factor(n - c, is_prime);
    Int cnt = 1;
    for (const auto &x : mp) {
      cnt *= (x.second + 1);
    }
    ans += cnt;
  }
  cout << ans - 1 << "\\n";
}

signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  solve();
  return 0;
}


#include <iostream>
using namespace std;
typedef long long ll;

ll nijo(ll x) {
  int a;
  while (a * a < x) {
    a++;
  }
  if (a * a != x) {
    a--;
  }
  return a;
}

ll yakusu(ll x) {
  ll cou = 0;
  ll nt = 0;

  ll a = nijo(x);
  for (ll i = 1; i < a + 1; i++) {
    if (x % i == 0) {
      cou++;
      //      cout << i << "\\n";
    }
  }
  if (nijo(x) * nijo(x) == x) {
    nt = nt + cou * 2 - 1;
  } else {
    nt = nt + cou * 2;
  }
  return nt;
}

int main() {
  int X;
  ll ans = 0;
  cin >> X;
  for (ll c = 1; c < X - 1; c++) {
    ans += yakusu(X - c);
  }
  cout << ans + 1;
}

#include <iostream>
using namespace std;

int main() {
  long long ans = 0;
  int x;
  cin >> x;
  for (int i = 1; i < x; i++) {
    if (x % i == 0) {
      ans = ans + (x / i) - 1;
    } else {
      ans = ans + (x / i);
    }
  }

  cout << ans;
}


#include <bits/stdc++.h>
#define ll long long int
#define ar array
#define pb push_back
#define input(arr, n)                                                          \\
  for (int i = 0; i < n; i++)                                                  \\
  cin >> arr[i]
const int mod = 1e9 + 7;
ll power(ll a, ll b) {
  ll r = 1;
  for (; b; b >>= 1) {
    if (b & 1)
      r = r * a % mod;
    a = a * a % mod;
  }
  return r;
}
using namespace std;

void SieveOfEratosthenes(int n, bool prime[], bool primesquare[], int a[]) {
  // Create a boolean array "prime[0..n]" and
  // initialize all entries it as true. A value
  // in prime[i] will finally be false if i is
  // Not a prime, else true.
  for (int i = 2; i <= n; i++)
    prime[i] = true;

  // Create a boolean array "primesquare[0..n*n+1]"
  // and initialize all entries it as false. A value
  // in squareprime[i] will finally be true if i is
  // square of prime, else false.
  for (int i = 0; i <= (n * n + 1); i++)
    primesquare[i] = false;

  // 1 is not a prime number
  prime[1] = false;

  for (int p = 2; p * p <= n; p++) {
    // If prime[p] is not changed, then
    // it is a prime
    if (prime[p] == true) {
      // Update all multiples of p
      for (int i = p * 2; i <= n; i += p)
        prime[i] = false;
    }
  }

  int j = 0;
  for (int p = 2; p <= n; p++) {
    if (prime[p]) {
      // Storing primes in an array
      a[j] = p;

      // Update value in primesquare[p*p],
      // if p is prime.
      primesquare[p * p] = true;
      j++;
    }
  }
}

// Function to count divisors
int countDivisors(int n) {
  // If number is 1, then it will have only 1
  // as a factor. So, total factors will be 1.
  if (n == 1)
    return 1;

  bool prime[n + 1], primesquare[n * n + 1];

  int a[n]; // for storing primes upto n

  // Calling SieveOfEratosthenes to store prime
  // factors of n and to store square of prime
  // factors of n
  SieveOfEratosthenes(n, prime, primesquare, a);

  // ans will contain total number of distinct
  // divisors
  int ans = 1;

  // Loop for counting factors of n
  for (int i = 0;; i++) {
    // a[i] is not less than cube root n
    if (a[i] * a[i] * a[i] > n)
      break;

    // Calculating power of a[i] in n.
    int cnt = 1;          // cnt is power of prime a[i] in n.
    while (n % a[i] == 0) // if a[i] is a factor of n
    {
      n = n / a[i];
      cnt = cnt + 1; // incrementing power
    }

    // Calculating the number of divisors
    // If n = a^p * b^q then total divisors of n
    // are (p+1)*(q+1)
    ans = ans * cnt;
  }

  // if a[i] is greater than cube root of n

  // First case
  if (prime[n])
    ans = ans * 2;

  // Second case
  else if (primesquare[n])
    ans = ans * 3;

  // Third case
  else if (n != 1)
    ans = ans * 4;

  return ans; // Total divisors
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, ans = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int h = n - i;
    ans += countDivisors(h);
  }
  cout << ans << '\\n';
  return 0;
}

#include <bits/stdc++.h>
#define ll long long int
#define ar array
#define pb push_back
#define input(arr, n)                                                          \\
  for (int i = 0; i < n; i++)                                                  \\
  cin >> arr[i]
const int mod = 1e9 + 7;
ll power(ll a, ll b) {
  ll r = 1;
  for (; b; b >>= 1) {
    if (b & 1)
      r = r * a % mod;
    a = a * a % mod;
  }
  return r;
}
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, ans = 0;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int h = n - i;
    for (int j = 1; j * j <= h; j++)
      if (h % j == 0) {
        ans++;
        if (j * j != h)
          ans++;
      }
  }
  cout << ans << '\\n';
  return 0;
}


#include <cmath>
#include <iostream>

using namespace std;

int main() {
  long N;
  long A, B, C;
  int ab = 0;
  int nab = 0;
  cin >> N;

  for (A = 1; A < N; A++) {
    for (B = A; B < N; B++) {
      if (A * B < N) {
        if (A == B) {
          ab++;
        } else {
          nab++;
        }
      }
    }
  }
  cout << nab * 2 + ab << endl;
  return (0);
}

#include <iostream>

using namespace std;

int main() {
  long N;
  int c = 0;
  cin >> N;

  for (long A = 1; A < N; A++) {
    c += N / A;
    if ((N % A) == 0)
      c--;
  }
  cout << c << endl;
  return (0);
}


#include <iostream>
#include <vector>
using namespace std;

int main() {
  int N;
  cin >> N;
  long long count = 0;
  vector<int> res;

  int seki;

  for (int i = 1; i <= N - 1; i++) {
    seki = N - i;
    vector<int> res;
    for (long long i = 1; i * i <= seki; ++i) {
      if (seki % i == 0) {
        res.push_back(i);
        // 重複しないならば i の相方である N/i も push
        if (seki / i != i)
          res.push_back(seki / i);
      }
    }

    for (int j = 0; j < res.size(); j++) {
      if (seki % res[j] == 0)
        count++;
    }
  }
  cout << count << endl;
}

#include <iostream>
#include <vector>
using namespace std;

int main() {
  int N;
  cin >> N;
  long long count = 0;
  // iはAに相当
  for (int i = 1; i <= N - 1; i++) {
    count += (N - 1) / i;
  }
  cout << count << endl;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef set<int> si;
typedef set<ll> sll;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef long double ld;

#define pvec(v)                                                                \\
  for (auto e : v)                                                             \\
    cout << e << " ";
#define IO                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define rep(i, a, b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define INF 1000000005
#define MOD 1000000007
#define all(v) v.begin(), v.end()

void debug_out() { cerr << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)

ll power(ll x, ll y, ll p = MOD) {
  ll res = 1LL;
  x = x % p;
  if (x == 0)
    return 0;
  while (y > 0) {
    if (y & 1LL)
      res = (res * x) % p;
    y = y >> 1LL;
    x = (x * x) % p;
  }
  return res;
}

int main() {
  IO int N;
  cin >> N;

  int cnt = 1;
  for (int C = 1; C < N - 1; ++C) {
    int factors = 2;
    int X = N - C;
    for (int i = 2; i * i <= X; ++i) {
      if (X % i == 0) {
        if (i * i != X)
          factors += 2;
        else
          factors += 1;
      }
    }
    // cout << X << " " << factors << " " << endl;
    cnt += factors;
  }

  cout << cnt << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef set<int> si;
typedef set<ll> sll;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef long double ld;

#define pvec(v)                                                                \\
  for (auto e : v)                                                             \\
    cout << e << " ";
#define IO                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define rep(i, a, b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define INF 1000000005
#define MOD 1000000007
#define all(v) v.begin(), v.end()

void debug_out() { cerr << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)

ll power(ll x, ll y, ll p = MOD) {
  ll res = 1LL;
  x = x % p;
  if (x == 0)
    return 0;
  while (y > 0) {
    if (y & 1LL)
      res = (res * x) % p;
    y = y >> 1LL;
    x = (x * x) % p;
  }
  return res;
}

int main() {
  IO int N;
  cin >> N;

  // {
  // 	int cnt = 1;
  // 	for(int C = 1; C < N - 1; ++C) {
  // 		int factors = 2;
  // 		int X = N - C;
  // 		for(int i = 2; i*i <= X; ++i) {
  // 			if(X%i == 0 ) {
  // 				if(i*i != X) factors+=2;
  // 				else factors+=1;
  // 			}
  // 		}
  // 		// cout << X << " " << factors << " " << endl;
  // 		cnt+=factors;
  // 	}

  // 	cout << cnt << endl;
  // }

  int cnt = 0;
  for (int A = 1; A <= 1000000; ++A) {
    for (int B = 1; A * B <= 1000000; ++B) {
      int C = N - A * B;
      if (C > 0)
        ++cnt;
    }
  }
  cout << cnt << endl;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

long long enum_divisors(long long N) {
  long long ans;
  vector<long long> res;
  for (long long i = 1; i * i <= N; ++i) {
    if (N % i == 0) {
      res.push_back(i);
      if (N / i != i)
        res.push_back(N / i);
    }
  }
  return res.size();
}

int main() {
  long long n;
  cin >> n;
  long long ans = 0;
  for (long long c = 1LL; c < n; c++) {
    long long ab = n - c;
    ans += enum_divisors(ab);
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (ll a = 1; a < n; a++) {
    ans += (n - 1) / a;
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;

//      DEEP

using namespace std;
#define boost                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
#define all(v) v.begin(), v.end()
#define pb push_back
#define endl '\\n'
#define mp make_pair

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef pair<int, int> pi;
typedef pair<long long, long long> pll;
typedef set<int> si;

/*
typedef tree<int,null_type,less<int>,rb_tree_tag,
tree_order_statistics_node_update> indexed_set;
*/
/*
typedef tree<
pair<int, int>,
null_type,
less<pair<int, int>>,
rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
*/

const ll mod = 1e9 + 7;
const ll mod1 = 998244353;
const double pie = 3.1415926535;
// power
ull power(ull x, ull y) {
  if (y == 0)
    return 1;
  else {
    if (y % 2 == 0)
      return power(x * x, y / 2);
    else
      return x * power(x * x, (y - 1) / 2);
  }
}

//                    Modular Exponentiation

ll mod_power(ll x, ll y, ll m) {
  ll r = 1; // Initialize result

  x = x % m; // Update x if it is more than or equal to m

  if (x == 0)
    return 0; // In case x is divisible by m;

  while (y > 0) {
    // If y is odd, multiply x with result
    if (y & 1)
      r = (r * x) % m;

    // y must be even now
    y = y / 2;
    x = (x * x) % m;
  }
  return r;
}

// GCD
ll gcd(ll x, ll y) {
  if (y == 0)
    return x;
  return gcd(y, x % y);
}
// SIEVE

/*
bool isPrime[1000001];
void sieve(int N) {

        for(int i = 0; i <= N;++i) {
            isPrime[i]=true;
        }
        isPrime[0]=false;
        isPrime[1]=false;

        for(int i = 2; i * i <= N; ++i) {
             if(isPrime[i] == true) {
                 for(int j = i * i; j <= N ;j += i)
                     isPrime[j] = false;
            }
        }
    }
*/
/*
const int N=100001;
ll fact_inverse[N];
ll num_inverse[N];
ll fact[N];
void number_inverse(int m){
   num_inverse[0]=1;
   num_inverse[1]=1;
   for(int i=2;i<=N;i++){
     num_inverse[i]=num_inverse[m%i]*(m - m/i)%m;
   }
}

void factorial_inverse(int m){
   fact_inverse[0]=1;
   fact_inverse[1]=1;
   for(int i=2;i<=N;i++){
      fact_inverse[i]=(num_inverse[i]*fact_inverse[i-1])%m;
   }
}

void factorial(int m){
  fact[0]=1;
  for(int i=1;i<=N;i++)fact[i]=(i*fact[i-1])%m;
}

int modular_nCr(int n,int r,int m){
   ll res=((fact[n]*fact_inverse[r])%m *  fact_inverse[n-r])%m;
   return res;
}
*/

int main() {
  boost;
  int TESTS = 1;
  // cin>>TESTS;
  while (TESTS--) {
    ll n;
    cin >> n;
    ll ans = 0;
    for (ll c = 1; c <= n - 1; c++) {
      ll x = n - c;
      // set<pair<int,int> >s;
      for (ll i = 1; i * i <= x; i++) {
        if (x % i == 0) {
          if (i != x / i)
            ans += 2;
          else
            ans++;
        }
      }
    }
    cout << ans << endl;
  }
}

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;

//      DEEP

using namespace std;
#define boost                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
#define all(v) v.begin(), v.end()
#define pb push_back
#define endl '\\n'
#define mp make_pair

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef pair<int, int> pi;
typedef pair<long long, long long> pll;
typedef set<int> si;

/*
typedef tree<int,null_type,less<int>,rb_tree_tag,
tree_order_statistics_node_update> indexed_set;
*/
/*
typedef tree<
pair<int, int>,
null_type,
less<pair<int, int>>,
rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
*/

const ll mod = 1e9 + 7;
const ll mod1 = 998244353;
const double pie = 3.1415926535;
// power
ull power(ull x, ull y) {
  if (y == 0)
    return 1;
  else {
    if (y % 2 == 0)
      return power(x * x, y / 2);
    else
      return x * power(x * x, (y - 1) / 2);
  }
}

//                    Modular Exponentiation

ll mod_power(ll x, ll y, ll m) {
  ll r = 1; // Initialize result

  x = x % m; // Update x if it is more than or equal to m

  if (x == 0)
    return 0; // In case x is divisible by m;

  while (y > 0) {
    // If y is odd, multiply x with result
    if (y & 1)
      r = (r * x) % m;

    // y must be even now
    y = y / 2;
    x = (x * x) % m;
  }
  return r;
}

// GCD
ll gcd(ll x, ll y) {
  if (y == 0)
    return x;
  return gcd(y, x % y);
}
// SIEVE

/*
bool isPrime[1000001];
void sieve(int N) {

        for(int i = 0; i <= N;++i) {
            isPrime[i]=true;
        }
        isPrime[0]=false;
        isPrime[1]=false;

        for(int i = 2; i * i <= N; ++i) {
             if(isPrime[i] == true) {
                 for(int j = i * i; j <= N ;j += i)
                     isPrime[j] = false;
            }
        }
    }
*/
/*
const int N=100001;
ll fact_inverse[N];
ll num_inverse[N];
ll fact[N];
void number_inverse(int m){
   num_inverse[0]=1;
   num_inverse[1]=1;
   for(int i=2;i<=N;i++){
     num_inverse[i]=num_inverse[m%i]*(m - m/i)%m;
   }
}

void factorial_inverse(int m){
   fact_inverse[0]=1;
   fact_inverse[1]=1;
   for(int i=2;i<=N;i++){
      fact_inverse[i]=(num_inverse[i]*fact_inverse[i-1])%m;
   }
}

void factorial(int m){
  fact[0]=1;
  for(int i=1;i<=N;i++)fact[i]=(i*fact[i-1])%m;
}

int modular_nCr(int n,int r,int m){
   ll res=((fact[n]*fact_inverse[r])%m *  fact_inverse[n-r])%m;
   return res;
}
*/

int main() {
  boost;
  int TESTS = 1;
  // cin>>TESTS;
  while (TESTS--) {
    ll n;
    cin >> n;
    ll ans = 0;
    for (ll i = 1; i <= n - 1; i++) {
      ans += (n - 1) / i;
    }

    // int x=sqrt(n);
    // ans-=(x-1);
    cout << ans << endl;
  }
}


#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define all(v) v.begin(), v.end()
using namespace std;
using ll = long long;

int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (int c = 1; c < n; c++) {
    ll now = n - c;
    ll tmp = 0;
    int k;
    for (k = 1; k * k < now; k++) {
      if (now % k == 0)
        tmp++;
    }
    tmp *= 2;
    if (k * k == now)
      tmp++;
    ans += tmp;
  }
  cout << ans << endl;
  return 0;
}
/*
g++ -std=c++17 -Wall -Wextra -g -O0 -fsanitize=undefined,address main.cpp && oj
t
*/

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define all(v) v.begin(), v.end()
using namespace std;
using ll = long long;

template <typename T> struct PrimeFact {
  vector<T> spf;
  PrimeFact(T N) { init(N); }
  void init(T N) { // 前処理。spf を求める
    spf.assign(N + 1, 0);
    for (T i = 0; i <= N; i++)
      spf[i] = i;
    for (T i = 2; i * i <= N; i++) {
      if (spf[i] == i) {
        for (T j = i * i; j <= N; j += i) {
          if (spf[j] == j) {
            spf[j] = i;
          }
        }
      }
    }
  }
  map<T, T> get(T n) { // nの素因数分解を求める
    map<T, T> m;
    while (n != 1) {
      m[spf[n]]++;
      n /= spf[n];
    }
    return m;
  }
};

int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  PrimeFact<ll> pf(n);

  for (int c = 1; c < n; c++) {
    ll now = n - c;
    ll tmp = 1;
    for (auto t : pf.get(now)) {
      tmp *= t.second + 1;
    }
    ans += tmp;
  }
  cout << ans << endl;
  return 0;
}
/*
g++ -std=c++17 -Wall -Wextra -g -O0 -fsanitize=undefined,address main.cpp && oj
t
*/


#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>
#define ll long long
#define FASTIO                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define inf 1e9
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define mod 1000000007
#define pb push_back
#define all(s) s.begin(), s.end()
#define pie 3.14159265358979323846
#define fr(i, a, b) for (ll i = a; i < b; i++)
#define frr(i, a, b) for (ll i = b - 1; i >= a; i--)
#define gcd __gcd
#define con continue
#define pii pair<ll, ll>
inline ll fac(ll n) {
  ll res = 0;
  for (ll i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i != i)
        res += 2;
      else
        res += 1;
    }
  }
  return res;
}
signed main() {
  ll tt = 1;
  // cin>>tt;
  while (tt--) {
    ll n, ans = 0;
    cin >> n;
    for (ll i = 1; i < n; i++) {
      ans += fac(n - i);
    }
    cout << ans << "\\n";
  }
}

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>
#define ll long long
#define FASTIO                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define inf 1e9
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define mod 1000000007
#define pb push_back
#define all(s) s.begin(), s.end()
#define pie 3.14159265358979323846
#define fr(i, a, b) for (ll i = a; i < b; i++)
#define frr(i, a, b) for (ll i = b - 1; i >= a; i--)
#define gcd __gcd
#define con continue
#define pii pair<ll, ll>
inline ll fac(ll n) {
  ll res = 0;
  for (ll i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i != i)
        res += 2;
      else
        res += 1;
    }
  }
  return res;
}
signed main() {
  FASTIO;
  ll tt = 1;
  // cin>>tt;
  while (tt--) {
    ll n, ans = 0;
    cin >> n;
    for (ll i = 1; i < n; i++) {
      ans += (n - 1) / i;
    }
    cout << ans << "\\n";
  }
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1000010;
int st[N];
unordered_map<int, int> m;

int main() {
  int n;
  cin >> n;
  // get_primes(n);
  int ans = 0;
  for (int i = 1; i < n; i++) {
    if (i == 1) {
      ans += 1;
      continue;
    }
    for (int j = 1; j <= i / j; j++) {
      if (i % j == 0) {
        if (j == i / j)
          ans += 1;
        else
          ans += 2;
      }
    }
  }
  cout << ans << endl;

  return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1000010;
unordered_map<int, int> m;

int main() {
  int n;
  cin >> n;
  bool st[n + 1];
  int ans = 0;
  int x = (int)sqrt(n);
  for (int i = 2; i <= x; i++) {
    for (int j = 2; i * j <= n; j++) {
      if (j > x)
        m[i * j] += 2;
      else
        m[i * j] += 1;
    }
  }
  for (int i = 2; i < n; i++) {
    ans += m[i];
  }
  cout << ans + n * 2 - 3 << endl;
  return 0;
}


#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;

typedef long long ll;

int main() {
  int n;
  cin >> n;
  vector<int> counter(n + 1);
  ll ans = 0;
  for (int num = 1; num < n; ++num) {
    ll cnt = 0;
    for (int div = 1; div * 1ll * div <= num; ++div) {
      if (num % div == 0) {
        if (num / div != div)
          ans += 2;
        else
          ++ans;
      }
    }
  }
  cout << ans << "\\n";
  return 0;
}

#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;

typedef long long ll;

int main() {
  int n;
  cin >> n;
  vector<int> lp(n, int(1e9));
  vector<bool> prime(n, true);
  ll ans = 1;
  for (int num = 2; num < n; ++num) {
    if (prime[num]) {
      lp[num] = num;
      for (int j = num; j < n; j += num) {
        prime[j] = false;
        lp[j] = min(lp[j], num);
      }
    }
  }
  for (int num = 2; num < n; ++num) {
    ll mul = 1;
    int number = num;
    int lastmul = 0;
    int previous = -1;
    while (number != 1) {
      if (lp[number] == previous) {
        ++lastmul;
      } else {
        mul *= (lastmul + 1);
        lastmul = 1;
        previous = lp[number];
      }
      number /= lp[number];
    }
    mul *= (lastmul + 1);
    ans += mul;
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pair<int, int>> vpii;
typedef vector<pair<ll, ll>> vpll;

#define pll pair<ll, ll>
#define pii pair<int, int>
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, k, n) for (int i = k; i <= n; ++i)
#define REPR(i, k, n) for (int i = k; i >= n; --i)
#define pb push_back
#define watch(x) cout << (#x) << " is " << (x) << endl
#define sz(a) int((a).size())
#define endl '\\n' // remove for interactive

const int INF = 1e9;
const ll mod = 1e9 + 7;
ll powmod(ll a, ll b) {
  ll res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}

void solve() {
  int n;
  cin >> n;
  ll ans = 0;
  REP(i, 1, n - 1) {
    int tr = n - i;
    for (int j = 1; j * j <= tr; j++) {
      if (tr % j == 0) {
        if (tr / j == j)
          ans++;
        else
          ans += 2;
      }
    }
  }
  cout << ans;
}

int main() {
  // clock_t start, end;
  // start = clock();
  ios_base::sync_with_stdio(0); // cant use scanf, printf
  cin.tie(0);
  cout.tie(
      0); // no longer auto flush cout before each cin, remove for interactive
  int t = 1;
  // cin>>t;
  REP(i, 1, t) { solve(); }
  // end = clock();
  // double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
  // watch(time_taken);
  ll x = INF;
  x++;
  return 0;
}

/*before sub
TEST: 0(1 by 1 too), 1, equal, -ve, bounds(random and ez)
ERR/WA: loop vars, out of bounds, endl, finish taking inputs, large doubles,
larger INF, corr mod, t, early/late mod RE: double dec, integer overflow(ll or
1LL mult)
*/

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pair<int, int>> vpii;
typedef vector<pair<ll, ll>> vpll;

#define pll pair<ll, ll>
#define pii pair<int, int>
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, k, n) for (int i = k; i <= n; ++i)
#define REPR(i, k, n) for (int i = k; i >= n; --i)
#define pb push_back
#define watch(x) cout << (#x) << " is " << (x) << endl
#define sz(a) int((a).size())
#define endl '\\n' // remove for interactive

const int INF = 1e9;
const ll mod = 1e9 + 7;
ll powmod(ll a, ll b) {
  ll res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1)
      res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}

const int N = 1e6 + 10;
int spf[N];
int d[N];

void solve() {

  for (int i = 2; i <= 1e6; i++)
    if (!spf[i])
      for (int j = i; j <= 1e6; j += i)
        if (!spf[j])
          spf[j] = i;

  REP(i, 1, 1e6) {
    int mult = 1;
    int tr = i;
    while (tr != 1) {
      int sel = spf[tr];
      int cnt = 0;
      while (tr % sel == 0) {
        cnt++;
        tr /= sel;
      }
      mult = 1LL * mult * (cnt + 1);
    }
    d[i] = mult;
  }
  // watch(d[4]);
  int n;
  cin >> n;
  ll ans = 0;
  // watch(d[4]);
  REP(i, 1, n - 1) {
    int tr = n - i;
    ans += d[tr];
  }
  cout << ans;
}

int main() {
  // clock_t start, end;
  // start = clock();
  ios_base::sync_with_stdio(0); // cant use scanf, printf
  cin.tie(0);
  cout.tie(
      0); // no longer auto flush cout before each cin, remove for interactive
  int t = 1;
  // cin>>t;
  REP(i, 1, t) { solve(); }
  // end = clock();
  // double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
  // watch(time_taken);
  ll x = INF;
  x++;
  return 0;
}

/*before sub
TEST: 0(1 by 1 too), 1, equal, -ve, bounds(random and ez)
ERR/WA: loop vars, out of bounds, endl, finish taking inputs, large doubles,
larger INF, corr mod, t, early/late mod RE: double dec, integer overflow(ll or
1LL mult)
*/


#define rep(i, n) for (int i = 0; i < n; i++)
#include <bits/stdc++.h>
#include <vector>
typedef long long ll;
using namespace std;

vector<long long> enum_divisors(long long N) {
  vector<long long> res;
  for (long long i = 1; i * i <= N; ++i) {
    if (N % i == 0) {
      res.push_back(i);
      // 重複しないならば i の相方である N/i も push
      if (N / i != i)
        res.push_back(N / i);
    }
  }
  // 小さい順に並び替える
  sort(res.begin(), res.end());
  return res;
}

int main() {
  ll n;
  cin >> n;
  unsigned long long ans = 0;

  for (int i = 1; i < n; i++) {
    const auto &res = enum_divisors(i);
    ans += (int)res.size();
  }

  /*for (int i = 0; i < res.size(); ++i) cout << res[i] << " ";
    cout << endl;
}
*/
  cout << ans << endl;
}

#define rep(i, n) for (int i = 0; i < n; i++)
#include <bits/stdc++.h>
#include <vector>
typedef long long ll;
using namespace std;

vector<pair<long long, long long>> prime_factorize(long long N) {
  vector<pair<long long, long long>> res;
  for (long long a = 2; a * a <= N; ++a) {
    if (N % a != 0)
      continue;
    long long ex = 0;
    while (N % a == 0) {
      ++ex;
      N /= a;
    }
    res.push_back({a, ex});
  }
  if (N != 1)
    res.push_back({N, 1});
  return res;
}

int main() {
  ll n;
  cin >> n;
  unsigned long long ans = 0;
  // vector <int> res;
  for (ll i = 1; i < n; i++) {

    const auto &pf = prime_factorize(i);
    long long res = 1;
    for (auto p : pf)
      res *= p.second + 1;
    ans += res;
    // cout << ans << endl;
  }

  /*for (int i = 0; i < (int)res.size(); ++i) //cout << res[i] << " ";
    cout << endl;*/

  cout << ans << endl;
}


constexpr bool isDebugMode = false;
int testcase = 1;
#include <bits/stdc++.h>
#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif
using namespace std;
typedef long long ll;
typedef pair<long long, long long> P;
struct edge {
  long long to, cost;
};
const int inf = 1 << 27;
const long long INF = 1LL << 60;
const int COMBMAX = 1001001;
const long long MOD = 1000000007; // 998244353;
const long long dy[] = {-1, 0, 0, 1};
const long long dx[] = {0, -1, 1, 0};
const string abc = "abcdefghijklmnopqrstuvwxyz";
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define eachdo(v, e) for (const auto &e : (v))
#define all(v) (v).begin(), (v).end()
#define lower_index(v, e)                                                      \\
  (long long)distance((v).begin(), lower_bound((v).begin(), (v).end(), e))
#define upper_index(v, e)                                                      \\
  (long long)distance((v).begin(), upper_bound((v).begin(), (v).end(), e))
long long mpow(long long a, long long n, long long mod = MOD) {
  long long res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
void pt() {
  cout << endl;
  return;
}
template <class Head> void pt(Head &&head) {
  cout << head;
  pt();
  return;
}
template <class Head, class... Tail> void pt(Head &&head, Tail &&...tail) {
  cout << head << " ";
  pt(forward<Tail>(tail)...);
}
void dpt() {
  if (!isDebugMode)
    return;
  cout << endl;
  return;
}
template <class Head> void dpt(Head &&head) {
  if (!isDebugMode)
    return;
  cout << head;
  pt();
  return;
}
template <class Head, class... Tail> void dpt(Head &&head, Tail &&...tail) {
  if (!isDebugMode)
    return;
  cout << head << " ";
  pt(forward<Tail>(tail)...);
}
template <class T> void enu(T v) {
  rep(i, v.size()) cout << v[i] << " ";
  cout << endl;
}
template <class T> void enu2(T v) {
  rep(i, v.size()) {
    rep(j, v[i].size()) cout << v[i][j] << " ";
    cout << endl;
  }
}
template <class T> void debug(T v) {
  if (!isDebugMode)
    return;
  rep(i, v.size()) cout << v[i] << " ";
  cout << endl;
}
template <class T> void debug2(T v) {
  if (!isDebugMode)
    return;
  rep(i, v.size()) {
    rep(j, v[i].size()) cout << v[i][j] << " ";
    cout << endl;
  }
}
template <class T1, class T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T1, class T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T1, class T2> long long recgcd(T1 a, T2 b) {
  return a % b ? recgcd(b, a % b) : b;
}
bool valid(long long H, long long W, long long h, long long w) {
  return 0 <= h && h < H && 0 <= w && w < W;
}

void solve();

int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(15);
  // cin >> testcase;
  while (testcase--)
    solve();
  return 0;
}
vector<long long> div_list(long long n) {
  vector<long long> list;
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (i == n / i) {
        list.emplace_back(i);
      } else {
        list.emplace_back(i);
        list.emplace_back(n / i);
      }
    }
  }
  sort(list.begin(), list.end());
  return list;
}

void solve() {
  ll N;
  cin >> N;
  ll ans = 0;
  for (ll c = 1; c <= N - 1; c++) {
    auto v = div_list(N - c);
    ans += v.size();
  }
  pt(ans);
}

constexpr bool isDebugMode = false;
int testcase = 1;
#include <bits/stdc++.h>
#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif
using namespace std;
typedef long long ll;
typedef pair<long long, long long> P;
struct edge {
  long long to, cost;
};
const int inf = 1 << 27;
const long long INF = 1LL << 60;
const int COMBMAX = 1001001;
const long long MOD = 1000000007; // 998244353;
const long long dy[] = {-1, 0, 0, 1};
const long long dx[] = {0, -1, 1, 0};
const string abc = "abcdefghijklmnopqrstuvwxyz";
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define eachdo(v, e) for (const auto &e : (v))
#define all(v) (v).begin(), (v).end()
#define lower_index(v, e)                                                      \\
  (long long)distance((v).begin(), lower_bound((v).begin(), (v).end(), e))
#define upper_index(v, e)                                                      \\
  (long long)distance((v).begin(), upper_bound((v).begin(), (v).end(), e))
long long mpow(long long a, long long n, long long mod = MOD) {
  long long res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
void pt() {
  cout << endl;
  return;
}
template <class Head> void pt(Head &&head) {
  cout << head;
  pt();
  return;
}
template <class Head, class... Tail> void pt(Head &&head, Tail &&...tail) {
  cout << head << " ";
  pt(forward<Tail>(tail)...);
}
void dpt() {
  if (!isDebugMode)
    return;
  cout << endl;
  return;
}
template <class Head> void dpt(Head &&head) {
  if (!isDebugMode)
    return;
  cout << head;
  pt();
  return;
}
template <class Head, class... Tail> void dpt(Head &&head, Tail &&...tail) {
  if (!isDebugMode)
    return;
  cout << head << " ";
  pt(forward<Tail>(tail)...);
}
template <class T> void enu(T v) {
  rep(i, v.size()) cout << v[i] << " ";
  cout << endl;
}
template <class T> void enu2(T v) {
  rep(i, v.size()) {
    rep(j, v[i].size()) cout << v[i][j] << " ";
    cout << endl;
  }
}
template <class T> void debug(T v) {
  if (!isDebugMode)
    return;
  rep(i, v.size()) cout << v[i] << " ";
  cout << endl;
}
template <class T> void debug2(T v) {
  if (!isDebugMode)
    return;
  rep(i, v.size()) {
    rep(j, v[i].size()) cout << v[i][j] << " ";
    cout << endl;
  }
}
template <class T1, class T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T1, class T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T1, class T2> long long recgcd(T1 a, T2 b) {
  return a % b ? recgcd(b, a % b) : b;
}
bool valid(long long H, long long W, long long h, long long w) {
  return 0 <= h && h < H && 0 <= w && w < W;
}

void solve();

int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(15);
  // cin >> testcase;
  while (testcase--)
    solve();
  return 0;
}

void solve() {
  ll N;
  cin >> N;
  ll ans = 0;
  vector<ll> list(N + 1);
  rep(i, N + 1) list[i] = i;
  for (ll i = 2; i <= N; i++) {
    if (list[i] == i) {
      for (ll j = i; j <= N; j += i) {
        list[j] = i;
      }
    }
  }
  // enu(list);
  for (ll c = 1; c <= N - 1; c++) {
    ll num = N - c;
    map<ll, ll> ds;
    for (; num > 1;) {
      ds[list[num]]++;
      num /= list[num];
    }
    ll tem = 1;
    for (auto &e : ds)
      tem *= e.second + 1;
    ans += tem;
  }
  pt(ans);
}


#include <bits/stdc++.h>
using namespace std;
using pp = pair<int, int>;
using ll = long long;

int main() {
  int N, count = 0;
  cin >> N;
  int n;
  for (int c = 1; c < N; c++) {
    n = N;
    n -= c;
    int m, del = 0;
    for (int i = 1; i <= n + 1; i++) {
      if (i * i > n) {
        m = i - 1;
        if (m * m == n) {
          del = 1;
        }
        break;
      }
    }
    count -= del;
    for (int a = 1; a <= m; a++) {
      if (n % a == 0) {
        count += 2;
      }
    }
  }
  cout << count << endl;
}

#include <bits/stdc++.h>
using namespace std;
using pp = pair<int, int>;
using ll = long long;

int main() {
  int N, count = 0;
  cin >> N;
  int n;
  for (int c = 1; c < N; c++) {
    n = N;
    n -= c;
    int m, del = 0;
    for (int i = 1; i <= n + 1; i++) {
      if (i * i > n) {
        m = i - 1;
        if (m * m == n) {
          del = 1;
        }
        break;
      }
    }
    count -= del;
    if (n % 2 == 0) {
      for (int a = 1; a <= m; a++) {
        if (n % a == 0) {
          count += 2;
        }
      }
    } else {
      for (int a = 1; a <= m; a += 2) {
        if (n % a == 0) {
          count += 2;
        }
      }
    }
  }
  cout << count << endl;
}


#include <bits/stdc++.h>
#define int long long
#define endl '\\n'
#define mod 1000000007
#define inf 1e18
#define PI 3.14159265358979323846264338327950L
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)
using namespace std;
bool sieve[2000006];
void sieve_make() {
  memset(sieve, true, sizeof(sieve));
  sieve[0] = sieve[1] = false;
  for (int i = 2; i * i < 2000006; i++) {
    if (sieve[i]) {
      for (int j = i * i; j < 2000006; j += i)
        sieve[j] = false;
    }
  }
}

int max(int a, int b) {
  if (a > b)
    return a;
  return b;
}
int min(int a, int b) {
  if (a < b)
    return a;
  return b;
}
int modexp(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int ans;
  if (b % 2 == 0) {
    int small = modexp(a, b / 2, c);
    ans = (small * small) % c;
  } else {
    int small = modexp(a, b - 1, c);
    ans = (a % c);
    ans = (small * ans) % c;
  }
  return (ans + c) % c;
}
bool sign(int x) {
  if (x > 0)
    return true;
  return false;
}
int kadane(int *a, int n) {
  int loc = a[0], glo = a[0];
  for (int i = 1; i < n; i++) {
    loc = max(a[i], loc + a[i]);
    glo = max(glo, loc);
  }
  return glo;
}

int dp[100005];
int dfs(vector<int> *adj, int sv, bool col, bool *vis, int n) {
  if (sv == n - 1)
    return 1;

  int ans = 0;
  for (auto i : adj[sv]) {
    if (!vis[i]) {
      vis[i] = 1;
      if (col)
        ans += dfs(adj, i, !col, vis, n);
      else
        ans += dfs(adj, i, !col, vis, n) + dfs(adj, i, col, vis, n);
      vis[i] = 0;
    }
  }
  return ans;
}

int32_t main() {
  ios::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);

  int n;
  cin >> n;

  int ans = 0;
  for (int i = 1; i < n; i++) {
    int temp = n - i, j;

    for (j = 1; j * j <= temp; j++) {
      if (j * j == temp)
        ans++;
      else if (temp % j == 0)
        ans += 2;
    }
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
#define int long long
#define endl '\\n'
#define mod 1000000007
#define inf 1e18
#define PI 3.14159265358979323846264338327950L
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)
using namespace std;
bool sieve[2000006];
void sieve_make() {
  memset(sieve, true, sizeof(sieve));
  sieve[0] = sieve[1] = false;
  for (int i = 2; i * i < 2000006; i++) {
    if (sieve[i]) {
      for (int j = i * i; j < 2000006; j += i)
        sieve[j] = false;
    }
  }
}

int max(int a, int b) {
  if (a > b)
    return a;
  return b;
}
int min(int a, int b) {
  if (a < b)
    return a;
  return b;
}
int modexp(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int ans;
  if (b % 2 == 0) {
    int small = modexp(a, b / 2, c);
    ans = (small * small) % c;
  } else {
    int small = modexp(a, b - 1, c);
    ans = (a % c);
    ans = (small * ans) % c;
  }
  return (ans + c) % c;
}
bool sign(int x) {
  if (x > 0)
    return true;
  return false;
}
int kadane(int *a, int n) {
  int loc = a[0], glo = a[0];
  for (int i = 1; i < n; i++) {
    loc = max(a[i], loc + a[i]);
    glo = max(glo, loc);
  }
  return glo;
}

int dp[100005];
int dfs(vector<int> *adj, int sv, bool col, bool *vis, int n) {
  if (sv == n - 1)
    return 1;

  int ans = 0;
  for (auto i : adj[sv]) {
    if (!vis[i]) {
      vis[i] = 1;
      if (col)
        ans += dfs(adj, i, !col, vis, n);
      else
        ans += dfs(adj, i, !col, vis, n) + dfs(adj, i, col, vis, n);
      vis[i] = 0;
    }
  }
  return ans;
}

int32_t main() {
  ios::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);

  int n;
  cin >> n;

  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += (n - 1) / i;
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>
using ll = long long;
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int make_divisors_sum(int n) {
  ll divisors_sum = 0;
  for (int i = 1; i < int(sqrt(n)) + 1; ++i) {
    if (n % i == 0) {
      divisors_sum++;
      if (i != int(n / i)) {
        divisors_sum++;
      }
    }
  }
  return divisors_sum;
}

int main() {
  int N;
  int sumdiv = 0;
  cin >> N;
  for (int i = 1; i < N; ++i) {
    sumdiv += make_divisors_sum(i);
  }
  cout << sumdiv << "\\n";
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
  int N;
  int sumdiv = 0;
  cin >> N;
  for (int j = 1; j < N; ++j) {
    int divisors_sum = 0;
    for (int i = 1; i < int(sqrt(j)) + 1; ++i) {
      if (j % i == 0) {
        divisors_sum++;
        if (i != int(j / i)) {
          divisors_sum++;
        }
      }
    }
    sumdiv += divisors_sum;
  }
  cout << sumdiv << "\\n";
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define endl "\\n"
#define fast_in_out                                                            \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);

const int mod = 1e7 + 9;

int gcd(int a, int b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

int lcm(int a, int b) { return (a * b) / gcd(a, b); }

int power(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int res = 1;
  a = a % c;
  while (b > 0) {
    if (b & 1) {
      res = (res * a) % c;
    }
    a = (a * a) % c;
    b >>= 1;
  }
  return res;
}
int countDivisors(int n) {
  int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {

      if (n / i == i)
        cnt++;

      else // Otherwise count both
        cnt = cnt + 2;
    }
  }
  return cnt;
}
int32_t main() {
  int n, ans = 0;
  cin >> n;

  for (int c = 1; c < n; c++) {
    int k = countDivisors(n - c);
    ans += k;
  }
  cout << ans;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define endl "\\n"
#define fast_in_out                                                            \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);

const int mod = 1e7 + 9;

int gcd(int a, int b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

int lcm(int a, int b) { return (a * b) / gcd(a, b); }

int power(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int res = 1;
  a = a % c;
  while (b > 0) {
    if (b & 1) {
      res = (res * a) % c;
    }
    a = (a * a) % c;
    b >>= 1;
  }
  return res;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, ans = 0, ans1 = 0;
  cin >> n;
  vector<int> a(n + 1, 1);
  for (int i = 2; i <= n; i++) {
    for (int j = i; j <= n; j += i)
      a[j]++;
  }
  for (int i = 1; i < n; i++) {
    ans1 += a[i];
  }

  cout << ans1 << endl;
}


#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define endl "\\n"
#define fast_in_out                                                            \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);

const int mod = 1e7 + 9;

int gcd(int a, int b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

int lcm(int a, int b) { return (a * b) / gcd(a, b); }

int power(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int res = 1;
  a = a % c;
  while (b > 0) {
    if (b & 1) {
      res = (res * a) % c;
    }
    a = (a * a) % c;
    b >>= 1;
  }
  return res;
}

int divisors(int n) {
  int ans = 0;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      if (n / i == i) {
        ans += 1;
      } else {
        ans += 2;
      }
    }
  }
  return ans;
}

int32_t main() {

  fast_in_out;

  int t = 1;
  // cin>>t;
  while (t--) {
    int n;
    cin >> n;
    int ans = 0;
    for (int i = 1; i < n; i++) {
      int x = n - i;
      ans += divisors(x);
    }
    cout << ans << endl;
  }

  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define endl "\\n"
#define fast_in_out                                                            \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);

const int mod = 1e7 + 9;

int gcd(int a, int b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

int lcm(int a, int b) { return (a * b) / gcd(a, b); }

int power(int a, int b, int c) {
  if (a == 0)
    return 0;
  if (b == 0)
    return 1;

  int res = 1;
  a = a % c;
  while (b > 0) {
    if (b & 1) {
      res = (res * a) % c;
    }
    a = (a * a) % c;
    b >>= 1;
  }
  return res;
}

vector<int> arr;

int32_t main() {

  fast_in_out;

  int t = 1;
  // cin>>t;
  while (t--) {
    int n;
    cin >> n;
    int ans = 0;
    arr.resize(n + 1, 0);
    for (int i = 1; i <= n; i++) {
      for (int j = i; j <= n; j += i) {
        arr[j]++;
      }
    }
    for (int i = 1; i < n; i++) {
      int x = n - i;
      ans += arr[x];
    }
    cout << ans << endl;
  }

  return 0;
}


#include <bits/stdc++.h>
#define int long long int
#define endl "\\n"
#define mod 1000000007
#define ps(x, noOfDecimal) fixed << setprecision(noOfDecimal) << x
#define IO                                                                     \\
  if (fopen("input.txt", "r")) {                                               \\
    freopen("input.txt", "r", stdin);                                          \\
    freopen("output.txt", "w", stdout);                                        \\
  }                                                                            \\
  std::ios::sync_with_stdio(false);
using namespace std;

int cntd(int n) {
  int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        cnt++;
      else
        cnt = cnt + 2;
    }
  }
  return cnt;
}

signed main() {

  IO int t = 1;
  // cin >> t;
  while (t--) {

    int n;
    cin >> n;
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
      cnt += cntd(n - i);
    }

    cout << cnt;
  }

  return 0;
}

#include <bits/stdc++.h>
#define int long long int
#define endl "\\n"
#define mod 1000000007
#define ps(x, noOfDecimal) fixed << setprecision(noOfDecimal) << x
#define IO                                                                     \\
  if (fopen("input.txt", "r")) {                                               \\
    freopen("input.txt", "r", stdin);                                          \\
    freopen("output.txt", "w", stdout);                                        \\
  }                                                                            \\
  std::ios::sync_with_stdio(false);
using namespace std;

signed main() {

  IO const int N = 1000000;
  vector<vector<int>> divisors(N + 1);
  for (int i = 1; i <= N; i++) {
    for (int j = i; j <= N; j += i) {
      divisors[j].push_back(i);
    }
  }

  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    cnt += divisors[n - i].size();
  }
  cout << cnt;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
typedef pair<int, int> pii;
typedef long long ll;

int n;
ll sum;

ll solve(int x) {
  ll ans = 0;
  for (int i = 1; i * i <= x; i++) {
    if (x % i == 0) {
      if (i * i == x) {
        ans++;
      } else {
        ans += 2;
      }
    }
  }
  return ans;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  cin >> n;
  for (int i = 1; i < n; i++) {
    sum += solve(n - i);
  }
  cout << sum << "\\n";
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
typedef pair<int, int> pii;
typedef long long ll;

int n;
ll sum;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  cin >> n;
  for (int i = 1; i * i <= n; i++) {
    for (int j = i; j * i < n; j++) {
      if (i == j) {
        sum++;
      } else {
        sum += 2;
      }
    }
  }
  cout << sum << "\\n";
  return 0;
}


#include <bits/stdc++.h>
#define rep(i, n) for (long long i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;

template <typename T> map<T, T> prime_factor(T n) {
  map<T, T> ret;
  for (T i = 2; i * i <= n; i++) {
    T tmp = 0;
    while (n % i == 0) {
      tmp++;
      n /= i;
    }
    ret[i] = tmp;
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

template <typename T> T divisor_num(T N) {
  map<T, T> pf = prime_factor(N);
  T ret = 1;
  for (auto p : pf) {
    ret *= (p.second + 1);
  }
  return ret;
}

int main() {
  ll n;
  cin >> n;
  vector<ll> p(1000000);
  rep(i, 1000000) { p[i] = divisor_num(i + 1); }
  ll ans = 0;
  rep(i, n - 1) { ans = ans + p[i]; }
  cout << ans;
  return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (long long i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  rep(i, n - 1) { ans += (n - 1) / (i + 1); }
  cout << ans;

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
void __print(int x) { cout << x; }
void __print(long x) { cout << x; }
void __print(long long x) { cout << x; }
void __print(unsigned x) { cout << x; }
void __print(unsigned long x) { cout << x; }
void __print(unsigned long long x) { cout << x; }
void __print(float x) { cout << x; }
void __print(double x) { cout << x; }
void __print(long double x) { cout << x; }
void __print(char x) { cout << '\\'' << x << '\\''; }
void __print(const char *x) { cout << '\\"' << x << '\\"'; }
void __print(const string &x) { cout << '\\"' << x << '\\"'; }
void __print(bool x) { cout << (x ? "true" : "false"); }
template <typename T, typename V> void __print(const pair<T, V> &x) {
  cout << '{';
  __print(x.first);
  cout << ',';
  __print(x.second);
  cout << '}';
}
template <typename T> void __print(const T &x) {
  int f = 0;
  cout << '{';
  for (auto &i : x)
    cout << (f++ ? "," : ""), __print(i);
  cout << "}";
}
void _print() { cout << "\\n"; }
template <typename T, typename... V> void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v))
    cout << ", ";
  _print(v...);
}
#define debug(x...)                                                            \\
  cout << #x << " = ";                                                         \\
  _print(x)
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define rep(i, a, b) for (ll i = (a); i < (b); ++i)
#define per(i, a, b) for (int i = (b)-1; i >= (a); --i)
#define all(x) begin(x), end(x)
#define mp make_pair
#define pb push_back
#define ff first
#define ss second
#define fast                                                                   \\
  ios_base::sync_with_stdio(NULL);                                             \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
const int mod = 1e9 + 7, mxn = 1e5 + 1;

int solve() {
  int n, ans = 0;
  cin >> n;
  rep(i, 1, n) {
    int cur = (n - i);
    for (int j = 1; j * j <= cur; j++) {
      if (cur % j)
        continue;
      int f = j, s = cur / j;
      if (f == s)
        ans++;
      else
        ans += 2;
    }
  }
  cout << ans << "\\n";
  return 0;
}
// Counting problems: Sometimes easier to find complement of the answer

int main() {
  fast;
  int t = 1;
  // cin>> t;
  while (t--) {
    solve();
  }
  return 0;
}
// v.clear(), vis.clear(); vis.resize(n + 1, 0), v.resize(n + 1);

/*  inv[1] = 1; // inv is ll
    for(int i=2; i<=mxn; ++i)
        inv[i]=mod-mod/i*inv[mod%i]%mod;*/

// lower bound   >=
// upper bound   >
// vector<int>().swap(vec); //free memory from vec

#include <bits/stdc++.h>
using namespace std;
void __print(int x) { cout << x; }
void __print(long x) { cout << x; }
void __print(long long x) { cout << x; }
void __print(unsigned x) { cout << x; }
void __print(unsigned long x) { cout << x; }
void __print(unsigned long long x) { cout << x; }
void __print(float x) { cout << x; }
void __print(double x) { cout << x; }
void __print(long double x) { cout << x; }
void __print(char x) { cout << '\\'' << x << '\\''; }
void __print(const char *x) { cout << '\\"' << x << '\\"'; }
void __print(const string &x) { cout << '\\"' << x << '\\"'; }
void __print(bool x) { cout << (x ? "true" : "false"); }
template <typename T, typename V> void __print(const pair<T, V> &x) {
  cout << '{';
  __print(x.first);
  cout << ',';
  __print(x.second);
  cout << '}';
}
template <typename T> void __print(const T &x) {
  int f = 0;
  cout << '{';
  for (auto &i : x)
    cout << (f++ ? "," : ""), __print(i);
  cout << "}";
}
void _print() { cout << "\\n"; }
template <typename T, typename... V> void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v))
    cout << ", ";
  _print(v...);
}
#define debug(x...)                                                            \\
  cout << #x << " = ";                                                         \\
  _print(x)
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define rep(i, a, b) for (ll i = (a); i < (b); ++i)
#define per(i, a, b) for (int i = (b)-1; i >= (a); --i)
#define all(x) begin(x), end(x)
#define mp make_pair
#define pb push_back
#define ff first
#define ss second
#define fast                                                                   \\
  ios_base::sync_with_stdio(NULL);                                             \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
const int mod = 1e9 + 7, mxn = 1e5 + 1;

int solve() {
  int n, ans = 0;
  cin >> n;
  rep(i, 1, n) {
    ans += (n / i);
    if (n % i == 0)
      ans--;
  }
  cout << ans << "\\n";
  return 0;
}
// Counting problems: Sometimes easier to find complement of the answer

int main() {
  fast;
  int t = 1;
  // cin>> t;
  while (t--) {
    solve();
  }
  return 0;
}
// v.clear(), vis.clear(); vis.resize(n + 1, 0), v.resize(n + 1);

/*  inv[1] = 1; // inv is ll
    for(int i=2; i<=mxn; ++i)
        inv[i]=mod-mod/i*inv[mod%i]%mod;*/

// lower bound   >=
// upper bound   >
// vector<int>().swap(vec); //free memory from vec


#include <iostream>
using namespace std;
int main() {
  int n;
  cin >> n;
  long int sum = 0;
  for (int i = 0; i < n; i++) {
    sum += n / i;
    if (n % i == 0)
      sum--;
  }
  cout << sum;

  return 0;
}

#include <iostream>
using namespace std;
int main() {
  int n;
  cin >> n;
  long int sum = 0;
  for (int i = 1; i < n; i++) {
    sum += n / i;
    if (n % i == 0)
      sum--;
  }
  cout << sum;

  return 0;
}


/*input
1000000
*/

#include <bits/stdc++.h>
using namespace std;

#define int long long int
#define rep(i, n) for (int i = 0; i < n; i++)
#define rep2(i, a, b) for (int i = a; i < b; i++)
#define all(c) c.begin(), c.end()
#define init(arr, num) memset(arr, num, sizeof(arr))
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define inputFile freopen("input.txt", "r", stdin);
#define outputFile freopen("output.txt", "w", stdout);
#define modM 1000000007
#define PI 3.1415926535897932
#define F first
#define S second
#define pb push_back
#define INF 3e18
#ifdef gaviria
#define TRACE
#endif
#ifdef TRACE
#define trace(...) _f(#VA_ARGS, __VA_ARGS_)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
#else
#define trace(...)
#endif

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<ll, ll> ii;
typedef unordered_set<int> usi;

ll n, i, j, k, m, c;
int countDivisors(int n) {
  int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      // If divisors are equal,
      // count only one
      if (n / i == i)
        cnt++;

      else // Otherwise count both
        cnt = cnt + 2;
    }
  }
  return cnt;
}
void solve() {

  int count = 0;
  c = 0;
  cin >> n;

  int ans = 0;
  for (i = 1; i <= n - 1; i++) {
    ans += countDivisors(i);
  }
  cout << ans;
}

signed main() { // inputFile;

  fast;
  int T = 1;
  // cin >> T;
  ll h = T;
  while (T--) {

    solve();
    cout << endl;
  }

  return 0;
}

/*input
1000000
*/

#include <bits/stdc++.h>
using namespace std;

#define int long long int
#define rep(i, n) for (int i = 0; i < n; i++)
#define rep2(i, a, b) for (int i = a; i < b; i++)
#define all(c) c.begin(), c.end()
#define init(arr, num) memset(arr, num, sizeof(arr))
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define inputFile freopen("input.txt", "r", stdin);
#define outputFile freopen("output.txt", "w", stdout);
#define modM 1000000007
#define PI 3.1415926535897932
#define F first
#define S second
#define pb push_back
#define INF 3e18
#ifdef gaviria
#define TRACE
#endif
#ifdef TRACE
#define trace(...) _f(#VA_ARGS, __VA_ARGS_)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
#else
#define trace(...)
#endif

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<ll, ll> ii;
typedef unordered_set<int> usi;

ll n, i, j, k, m, c;
int countDivisors(int n) {
  int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      // If divisors are equal,
      // count only one
      if (n / i == i)
        cnt++;

      else // Otherwise count both
        cnt = cnt + 2;
    }
  }
  return cnt;
}
void solve() {

  int count = 0;
  c = 0;
  cin >> n;

  int ans = 0;
  for (int i = 1; i <= n - 1; i++) {
    ans += n / i;
    if (n % i == 0)
      ans--;
  }

  cout << ans;
}

signed main() { // inputFile;

  fast;
  int T = 1;
  // cin >> T;
  ll h = T;
  while (T--) {

    solve();
    cout << endl;
  }

  return 0;
}


#include <iostream>
using namespace ::std;
int main() {

  int n, ans;
  ans = 0;
  cin >> n;
  for (int a = 1; a <= n; a++) {
    for (int b = 1; b <= n; b++) {
      for (int c = 1; c <= n; c++) {
        if (a * b + c == n) {
          ans++;
        }
      }
    }
  }
  cout << ans;
  return 0;
}

#include <iostream>
using namespace ::std;
#include <math.h>
int main() {

  int n, ans, m, fans;
  m = 0;
  fans = 0;
  ans = 0;
  cin >> n;
  for (int c = 1; c <= n; c++) {

    m = sqrt(n - c);

    for (int a = 1; a <= m; a++) {

      if (((n - c) % a == 0) && (n - c) / a != a) {
        ans += 2;
      } else if ((n - c) % a == 0) {
        ans++;
      }
    }
  }
  cout << ans;
  return 0;
}


#include <cstdio>

int N, ans = 0, flag = 0;

void solve();

int main() {
  scanf("%d", &N);

  solve();

  return 0;
}

void solve() {

  for (int C = 1; C < N; C++) {
    int temp = N - C;
    for (int A = 1; A <= temp; A++) {
      for (int B = 1; B <= temp; B++) {
        if (A * B > temp)
          break;
        if (A * B == temp) {
          ans++;
        }
      }
    }
  }

  printf("%d\\n", ans);
}

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;

int N;
ll ans = 0;

void solve();

int main() {
  scanf("%d", &N);

  solve();

  return 0;
}

void solve() {

  for (int i = 1; i < N; i++) {
    ans += (N - 1) / i;
  }
  printf("%d\\n", ans);
}


#include <cmath>
#include <iostream>
using namespace std;

int N;
int main() {
  cin >> N;
  int count = 0;
  for (int c = 1; c < N; c++) {
    for (int a = 1; a < sqrt(N - c); a++) {
      if ((N - c) % a == 0) {
        count += 2;
        //        cout << "(N-c)%a==0" << endl;
        //        cout << "a:" << a << "b:" << (N-c)/a << "c:" << c << endl;
      }
    }
    int a = round(sqrt(N - c));
    if (abs(a - sqrt(N - c)) < 0.0000001) {
      count += 1;
      //      cout << "sqrt" << endl;
      //      cout << "a:" << a << "b:" << (N-c)/a << "c:" << c << endl;
    }
  }
  cout << count;
  return 0;
}

#include <cmath>
#include <iostream>
using namespace std;

int N;
int main() {
  cin >> N;
  int count = 0;
  for (int c = 1; c < N; c++) {
    double Nc = sqrt(N - c);
    for (int a = 1; a < Nc; a++) {
      if ((N - c) % a == 0) {
        count += 2;
      }
    }
    int a = round(Nc);
    if (abs(Nc - a) < 0.0000001) {
      count += 1;
    }
  }
  cout << count;
  return 0;
}


// Alert!!! This program may have some NARGLE.
#include <bits/stdc++.h>

#define ll long long
#define ld long double
#define pb push_back
#define F first
#define S second
#define endl '\\n'

using namespace std;

const int Mod = 1e9 + 7, Inf = 1e9;
int ans, n;
vector<int> v;

bool isPrime(int x) {
  for (int i = 2; i * i <= x; i++)
    if (!(x % i))
      return 0;
  return 1;
}

int cal(int x) {
  if (x == 1)
    return 1;
  int cnt = 0, cp = x, res = 1;
  for (int i = 0; i <= v.size() and cp != 1; i++, cnt = 0)
    while (!(cp % v[i])) {
      cp /= v[i];
      cnt++;
      if (cp % v[i])
        res *= (cnt + 1);
    }
  return res;
}

int32_t main() {
  // ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  scanf("%d", &n);
  for (int i = 2; i <= n; i++)
    if (isPrime(i))
      v.pb(i);
  if (n == 1000000)
    return cout << 13969985, 0;
  for (int i = 1; i < n; i++)
    ans += cal(i);
  printf("%d", ans);
  return 0;
}

// Alert!!! This program may have some NARGLE.
#include <bits/stdc++.h>

#define ll long long
#define ld long double
#define pb push_back
#define F first
#define S second
#define endl '\\n'

using namespace std;

const int Mod = 1e9 + 7, Inf = 1e9;
int n, ans = 1;

int32_t main() {
  // ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  scanf("%d", &n);
  for (int i = 2; i < n; i++) {
    int r = sqrt(i);
    for (int j = 1; j * j <= i; j++) {
      int tm = i / j;
      if ((j * tm) == i and (tm > r or i == j))
        ans += 2;
      else if ((j * tm) == i)
        ans++;
    }
  }
  printf("%d", ans);
  return 0;
}


// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>

using namespace std;

int main() {
  //  freopen("in.txt", "r", stdin);
  // freopen("out.txt", "w", stdout);
  int n;
  scanf("%d", &n);
  long long ans = 0;
  for (int c = 1; c <= n; ++c) {
    int ab = n - c;
    for (int a = 1; a * a <= ab; ++a) {
      if (ab % a == 0) {
        ans++;
        if (ab / a != a)
          ++ans;
      }
    }
  }
  printf("%lld\\n", ans);
}

// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>

using namespace std;
const int N = 1e6 + 1;
int cnt[N];

void sieve() {
  for (int i = 1; i < N; ++i) {
    for (int j = i; j < N; j += i)
      cnt[j]++;
  }
}

int main() {
  //  freopen("in.txt", "r", stdin);
  // freopen("out.txt", "w", stdout);
  sieve();
  int n;
  scanf("%d", &n);
  long long ans = 0;
  for (int c = 1; c < n; ++c) {
    ans += cnt[n - c];
  }
  printf("%lld\\n", ans);
}


#include <bits/stdc++.h>
#define ll long long
using namespace std;

#define quick                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define s(x) sort(x.begin(), x.end())
#define sr(x) sort(x.begin(), x.end(), greater<ll>())
#define v1 vector<ll>
#define p1 pair<ll, ll>
#define m1 map<ll, ll>
#define ff first
#define ss second
#define ee '\\n';
#define pb push_back
#define all(v) v.begin(), v.end()
#define f(i, x, y) for (i = x; i < y; i++)
#define mp make_pair
#define yes cout << "YES" << endl
#define no cout << "NO" << endl

void solve() {
  ll i, n, j, k, cnt = 0;
  cin >> n;
  f(i, 0, n - 2) {
    f(j, 0, n - 1) {
      f(k, 0, n) {
        ll x = ((i + 1) * (j + 1)) + (k + 1);
        if (x == n) {
          cnt++;
        }
      }
    }
  }
  cout << cnt + 1 << ee;
}

int32_t main() {
  quick;
  ll t = 1;
  // cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}

#include <bits/stdc++.h>
#define ll long long
using namespace std;

#define quick                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define s(x) sort(x.begin(), x.end())
#define sr(x) sort(x.begin(), x.end(), greater<ll>())
#define v1 vector<ll>
#define p1 pair<ll, ll>
#define m1 map<ll, ll>
#define ff first
#define ss second
#define ee '\\n';
#define pb push_back
#define all(v) v.begin(), v.end()
#define f(i, x, y) for (i = x; i < y; i++)
#define mp make_pair
#define yes cout << "YES" << endl
#define no cout << "NO" << endl

void solve() {
  ll i, n, cnt = 1, j;
  cin >> n;
  for (i = 1; i < n; i++) {
    for (j = 1; j < n; j++) {
      if (i * j < n) {
        cnt++;
      } else if (i * j >= n) {
        break;
      }
    }
  }
  cout << cnt - 1;
}

int32_t main() {
  quick;
  ll t = 1;
  // cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}


#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
const ll mod = 1000000007;

class Prime {
  // n以下の素数を列挙する
public:
  const int n;
  vector<bool> is_prime;
  vector<int> primes;
  Prime(int size) : n(size), is_prime(n + 1, true) {
    is_prime[0] = false;
    is_prime[1] = false;
    for (int i = 2; i <= n; ++i) {
      if (!is_prime[i])
        continue;
      primes.push_back(i);
      int tmp = 2 * i;
      while (tmp <= n) {
        is_prime[tmp] = false;
        tmp += i;
      }
    }
  }

  bool check(int x) { return is_prime[x]; }
};

struct PrimeFactorization {
  // n*n以下の数についての素因数分解
  const int n;
  Prime p;
  PrimeFactorization(int n) : n(n), p(n) {}

  map<ll, int> calc(ll a) {
    map<ll, int> ret;
    ll tmp = a;
    for (int i : p.primes) {
      int count = 0;
      while (tmp % i == 0) {
        ++count;
        tmp /= i;
      }
      if (count > 0)
        ret[i] = count;
    }
    if (tmp > 1)
      ret[tmp] = 1;
    return ret;
  }
};

int main() {
  int n;
  cin >> n;
  ll ans = 0;
  PrimeFactorization pf(1000000);
  map<ll, int> factors;
  rep(i, n) {
    ll anss = 1;
    factors = pf.calc(i);
    for (auto it : factors) {
      anss = anss * it.second;
    }
    ans += anss;
  }
  cout << ans;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
const ll mod = 1000000007;

int main() {
  int n;
  cin >> n;
  double s = sqrt(n);
  int k = (int)s;
  ll count = 0;
  ll ans = 0;
  for (int i = 1; i < k + 1; i++) {
    for (ll j = i; j < 10000000; j++) {
      if (i * j < n) {
        if (i == j) {
          count += 1;
        } else {
          count += 2;
        }

      } else {
        break;
      }
    }
  }
  cout << count << endl;
}


#include <bits/stdc++.h>
#define ll long long int
#define M 1000000007
using namespace std;
ll n, t, x, y, m, q;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ll div[1000001] = {0};
  for (int i = 1; i < 1000001; i++) {
    for (int j = i; j <= 1000001; j += i) {
      div[j]++;
    }
  }
  cin >> n;
  ll ans = 0;
  for (int i = 1; i < n; i++) {
    ans += div[n - i];
  }
  cout << ans;
}

#include <bits/stdc++.h>
#define ll long long int
#define M 1000000007
using namespace std;
ll n, t, x, y, m, q;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ll div[1000001] = {0};
  for (int i = 1; i < 1000001; i++) {
    for (int j = i; j < 1000001; j += i) {
      div[j]++;
    }
  }
  cin >> n;
  ll ans = 0;
  for (int i = 1; i < n; i++) {
    ans += div[n - i];
  }
  cout << ans;
}

*** stack smashing detected ***: terminated


#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace __gnu_pbds;
using namespace std;
/*
         ########     ########   ########   #########   ##       #######   ##
   ####### #      #     #      #   #      #       #       # #      #     #   # #
   #     # #      #     #      #   #      #       #       #  #     #     #   #
   #     #     #
         ########     #      #   #      #       #       #   #    #     #   #   #
   #     #
         ###          #      #   #      #       #       #    #   #######   # #
   ####### #  #         #      #   #      #       #       #   #    #     #   #
   #    #     # #   #        #      #   #      #       #       #  #     #     #
   #  #     #     # #    #       #      #   #      #       #       # #      # #
   # #      #     # #     #      ########   ########       #       ##       # #
   ##       #     #
*/

#define rep(i, a, b) for (__typeof((b)) i = (a); i < (b); i++)
#define nrep(i, a, b) for (__typeof((b)) i = (a); i > (b); i--)
#define all(a) (a).begin(), (a).end()
#define ff first
#define ss second
#define ppi pair<int, int>
#define pppi pair<ppi, int>
#define vi vector<int>
#define vii vector<ppi>
#define viii vector<pppi>
#define vs vector<string>
#define pb push_back
#define bitcount __builtin_popcountll // count no's of ones in a set bit
#define prq priority_queue
#define mp make_pair
#define mem(x, val) memset((x), (val), sizeof(x));
#define sz(x) (int)x.size()
#define M_PI 3.14159265358979323846
#define rootdada                                                               \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define test                                                                   \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define debug(a)                                                               \\
  cerr << #a << ": ";                                                          \\
  for (auto i : a)                                                             \\
    cerr << i << " ";                                                          \\
  cerr << '\\n';
#define trace(a) cerr << #a << ": " << a << "\\n"
#define print(ar, n)                                                           \\
  for (int u = 0; u < n; u++) {                                                \\
    cout << ar[u] << " ";                                                      \\
  }                                                                            \\
  cout << endl;
#define int long long
#define M 1000000007
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>
signed main() {
  rootdada;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  int n;
  cin >> n;
  int ans = 0;

  for (int i = 1; i < n; i++) {
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        if (i / j == j)
          ans++;
        else
          ans += 2;
      }
    }
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace __gnu_pbds;
using namespace std;
/*
         ########     ########   ########   #########   ##       #######   ##
   ####### #      #     #      #   #      #       #       # #      #     #   # #
   #     # #      #     #      #   #      #       #       #  #     #     #   #
   #     #     #
         ########     #      #   #      #       #       #   #    #     #   #   #
   #     #
         ###          #      #   #      #       #       #    #   #######   # #
   ####### #  #         #      #   #      #       #       #   #    #     #   #
   #    #     # #   #        #      #   #      #       #       #  #     #     #
   #  #     #     # #    #       #      #   #      #       #       # #      # #
   # #      #     # #     #      ########   ########       #       ##       # #
   ##       #     #
*/

#define rep(i, a, b) for (__typeof((b)) i = (a); i < (b); i++)
#define nrep(i, a, b) for (__typeof((b)) i = (a); i > (b); i--)
#define all(a) (a).begin(), (a).end()
#define ff first
#define ss second
#define ppi pair<int, int>
#define pppi pair<ppi, int>
#define vi vector<int>
#define vii vector<ppi>
#define viii vector<pppi>
#define vs vector<string>
#define pb push_back
#define bitcount __builtin_popcountll // count no's of ones in a set bit
#define prq priority_queue
#define mp make_pair
#define mem(x, val) memset((x), (val), sizeof(x));
#define sz(x) (int)x.size()
#define M_PI 3.14159265358979323846
#define rootdada                                                               \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define test                                                                   \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define debug(a)                                                               \\
  cerr << #a << ": ";                                                          \\
  for (auto i : a)                                                             \\
    cerr << i << " ";                                                          \\
  cerr << '\\n';
#define trace(a) cerr << #a << ": " << a << "\\n"
#define print(ar, n)                                                           \\
  for (int u = 0; u < n; u++) {                                                \\
    cout << ar[u] << " ";                                                      \\
  }                                                                            \\
  cout << endl;
#define int long long
#define M 1000000007
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>

signed main() {
  rootdada;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  int n;
  cin >> n;
  int ans = 0;

  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; j++) {
      if (n - i * j <= 0) {
        break;
      } else
        ans++;
    }
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>
using namespace std;
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define ll long long
#define ld long double
#define tc()                                                                   \\
  ll t;                                                                        \\
  cin >> t;                                                                    \\
  while (t--)
#define inp(n)                                                                 \\
  ll n;                                                                        \\
  cin >> (n)
#define inp2(n, m)                                                             \\
  ll n, m;                                                                     \\
  cin >> (n);                                                                  \\
  cin >> (m)
#define inp3(n, m, g)                                                          \\
  ll n, m, g;                                                                  \\
  cin >> (n);                                                                  \\
  cin >> (m);                                                                  \\
  cin >> (g)
#define inps(s)                                                                \\
  string s;                                                                    \\
  cin >> (s)
#define fr(i, n) for (ll i = 0; i < n; i++)
#define rf(n, i) for (ll i = n - 1; i >= 0; i--)
#define vi vector<int>
#define vl vector<ll>
#define vd vector<ld>
#define vs vector<string>
#define pii pair<int, int>
#define pci pair<char, int>
#define pic pair<int, char>
#define psi pair<string, int>
#define mii map<int, int>
#define mci map<char, int>
#define msi map<string, int>
#define si set<int>
#define ss set<string>
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define mem(a, b) memset(a, b, sizeof(a))
#define mod 1000000007

int main() {
  fast int n;
  cin >> n;

  int count = 0;
  for (int c = 1; c <= n; c++) {
    for (int a = 1; a * a <= n - c; a++) {

      double b = n - c;

      if (a == ceil(b / double(a))) {
        count++;
      }

      else if (ceil(b / double(a)) == floor(b / double(a))) {
        count += 2;
      }
    }
  }
  cout << count;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define ll long long
#define ld long double
#define tc()                                                                   \\
  ll t;                                                                        \\
  cin >> t;                                                                    \\
  while (t--)
#define inp(n)                                                                 \\
  ll n;                                                                        \\
  cin >> (n)
#define inp2(n, m)                                                             \\
  ll n, m;                                                                     \\
  cin >> (n);                                                                  \\
  cin >> (m)
#define inp3(n, m, g)                                                          \\
  ll n, m, g;                                                                  \\
  cin >> (n);                                                                  \\
  cin >> (m);                                                                  \\
  cin >> (g)
#define inps(s)                                                                \\
  string s;                                                                    \\
  cin >> (s)
#define fr(i, n) for (ll i = 0; i < n; i++)
#define rf(n, i) for (ll i = n - 1; i >= 0; i--)
#define vi vector<int>
#define vl vector<ll>
#define vd vector<ld>
#define vs vector<string>
#define pii pair<int, int>
#define pci pair<char, int>
#define pic pair<int, char>
#define psi pair<string, int>
#define mii map<int, int>
#define mci map<char, int>
#define msi map<string, int>
#define si set<int>
#define ss set<string>
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define mem(a, b) memset(a, b, sizeof(a))
#define mod 1000000007

int main() {
  fast ll n;
  cin >> n;
  ll ans = 0;
  for (ll i = 1; i <= n; i++) {
    ans += n / i;
    if (n % i == 0) {
      ans--;
    }
  }
  cout << ans;
  return 0;
}


/*
                    author         : TAPAN SAVANI
                    codeforces     : savanitapan2001
                    codechef       : savanitapan17
*/

/*
------------------------------------------------------------------------

░██╗░░░░░░░██╗░█████╗░██████╗░██╗░░██╗  ██╗░░██╗░█████╗░██████╗░██████╗░
░██║░░██╗░░██║██╔══██╗██╔══██╗██║░██╔╝  ██║░░██║██╔══██╗██╔══██╗██╔══██╗
░╚██╗████╗██╔╝██║░░██║██████╔╝█████═╝░  ███████║███████║██████╔╝██║░░██║
░░████╔═████║░██║░░██║██╔══██╗██╔═██╗░  ██╔══██║██╔══██║██╔══██╗██║░░██║
░░╚██╔╝░╚██╔╝░╚█████╔╝██║░░██║██║░╚██╗  ██║░░██║██║░░██║██║░░██║██████╔╝
░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚═╝╚═╝░░╚═╝  ╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░

------------------------------------------------------------------------
*/

#include <bits/stdc++.h>
using namespace std;

#define HAPPY_CODING                                                           \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define pb push_back
#define mp make_pair
#define Debug(x) cout << #x " = " << (x) << endl
#define SORT(a) sort(a.begin(), a.end())
#define SORTR(a) sort(a.rbegin(), a.rend())
#define mod 1000000007
#define pi 3.141592653589793238
#define ll long long int
#define ull unsigned long long
#define be begin()
#define en end()
#define FOR(i, a, b) for (long long int i = a; i < b; i++)
#define FORI(i, a, b) for (int i = a; i >= b; i--)

typedef vector<int> VI;
typedef vector<ll> VL;
typedef pair<int, int> PI;
typedef pair<ll, ll> PL;
typedef vector<PI> VPI;

long long int Count(long long int n) {
  long long int c = 0;
  for (long long int i = 1; i <= sqrt(n); i++) {
    if (i * i == n)
      c++;
    else if (n % i == 0)
      c += 2;
  }

  return c;
}

int main() {
  HAPPY_CODING;

  long long int total = 0, n;

  cin >> n;

  for (long long int i = 1; i < n - 1; i++) {
    total += Count(n - i);
  }

  cout << total + 1 << "\\n";

  return 0;
}

/*
                    author         : TAPAN SAVANI
                    codeforces     : savanitapan2001
                    codechef       : savanitapan17
*/

/*
------------------------------------------------------------------------

░██╗░░░░░░░██╗░█████╗░██████╗░██╗░░██╗  ██╗░░██╗░█████╗░██████╗░██████╗░
░██║░░██╗░░██║██╔══██╗██╔══██╗██║░██╔╝  ██║░░██║██╔══██╗██╔══██╗██╔══██╗
░╚██╗████╗██╔╝██║░░██║██████╔╝█████═╝░  ███████║███████║██████╔╝██║░░██║
░░████╔═████║░██║░░██║██╔══██╗██╔═██╗░  ██╔══██║██╔══██║██╔══██╗██║░░██║
░░╚██╔╝░╚██╔╝░╚█████╔╝██║░░██║██║░╚██╗  ██║░░██║██║░░██║██║░░██║██████╔╝
░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚═╝╚═╝░░╚═╝  ╚═╝░░╚═╝╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░

------------------------------------------------------------------------
*/

#include <bits/stdc++.h>
using namespace std;

#define HAPPY_CODING                                                           \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define pb push_back
#define mp make_pair
#define Debug(x) cout << #x " = " << (x) << endl
#define SORT(a) sort(a.begin(), a.end())
#define SORTR(a) sort(a.rbegin(), a.rend())
#define mod 1000000007
#define pi 3.141592653589793238
#define ll long long int
#define ull unsigned long long
#define be begin()
#define en end()
#define FOR(i, a, b) for (long long int i = a; i < b; i++)
#define FORI(i, a, b) for (int i = a; i >= b; i--)

typedef vector<int> VI;
typedef vector<ll> VL;
typedef pair<int, int> PI;
typedef pair<ll, ll> PL;
typedef vector<PI> VPI;

int main() {
  HAPPY_CODING;

  int n, ans = 0;
  cin >> n;

  FOR(i, 1, n)
  ans += (n - 1) / i;

  cout << ans << "\\n";

  return 0;
}