#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto &a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template <class T> bool ckmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MOD = 1000000007;
const char nl = '\\n';
const int MX = 100001; // check the limits, dummy
const char sp = ' ';
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ll n;
  cin >> n;
  ll i, j, k;
  ll count = 0;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      if (i * j < n)
        count++;
    }
  }
  cout << count;
  return 0;
}

// read the question correctly (ll vs int)
// template by bqi343

#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto &a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template <class T> bool ckmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MOD = 1000000007;
const char nl = '\\n';
const int MX = 100001; // check the limits, dummy
const char sp = ' ';
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ll n;
  cin >> n;
  ll i, j;
  int count = 0;
  for (i = 1; i <= n; i++) {
    for (j = 1; i * j < n; j++) {
      count++;
    }
  }
  cout << count;
  return 0;
}

// read the question correctly (ll vs int)
// template by bqi343


#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  int N;
  cin >> N;
  int ans = 0;
  for (int i = 1; i < N; i++) {
    int x = N - i;
    for (int j = 1; j * j <= x; j++) {
      if (x % j == 0)
        ans += 2;
      if (j * j == x)
        ans--;
    }
  }
  cout << ans;
  return 0;
}

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  int N;
  cin >> N;
  int ans = 0;
  for (int a = 1; a < N; a++) {
    ans += N / a;
    if (N % a == 0)
      ans--;
  }
  cout << ans;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
long long solve(long long x) {
  set<long long> ms;
  for (long long i = 1; i <= sqrt(x); i++) {
    if (x % i == 0) {
      ms.insert(i);
      ms.insert(x / i);
    }
  }
  long long ans = 0;
  if (!ms.empty())
    ans = ms.size();
  return ans;
}
int main() {
  long long n, i, j;
  cin >> n;
  long long ans = 0;
  for (i = 1; i < n; i++) {
    long long x = n - i;
    // cout<<solve(x)<<" ";
    ans = ans + solve(x);
  }
  cout << ans;
}

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

int main() {
  long long n, i, j;
  cin >> n;
  long long ans = 0;
  for (i = 1; i < n; i++) {
    j = n / i;
    if (n % i == 0) {
      j--;
    }
    ans += j;
  }
  cout << ans;
}


#include <bits/stdc++.h>
typedef long long ll;
#define m 1000000007
using namespace std;
int main() {
  int n, ans = 0;
  cin >> n;
  --n;
  for (int i = 0; i <= n; i++)
    ans += n / i;

  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
typedef long long ll;
#define m 1000000007
using namespace std;
int main() {
  /*string s;
  cin>>s;
  int n=s.size();
  if(s[n-1]=='s')
      s.append("es");
  else
      s.append("s");
  cout<<s<<endl;
      int n;bool c=false;
      cin>>n;
  int a[n],b[n];
  for(int i=0;i<n;i++)
      cin>>a[i]>>b[i];

  for(int i=0;i<n;i++)
  {

      if(a[i]==b[i] && a[i+1]==b[i+1] && a[i+2]==b[i+2])
          c=true;
  }
  if(c)
      cout<<"Yes"<<endl;
  else
      cout<<"No"<<endl;*/

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

  for (int i = 1; i <= n; i++)
    ans += (n - 1) / i;

  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
ll get_factors(int n) {
  ll ret = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        ret++;
      else
        ret += 2;
    }
  }
  return ret;
}
int main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  ll ret = 0;
  vector<int> prime(1e6 + 5, true);
  prime[1] = false;
  for (int p = 2; p * p <= 1e6; p++) {
    if (prime[p]) {
      for (int i = p * p; i <= 1e6; i += p)
        prime[i] = false;
    }
  }
  for (int i = 1; i < n; i++) {
    if (n - i > 0) {
      if (prime[n - i])
        ret += 2;
      else
        ret += get_factors(n - i);
    }
  }
  cout << ret << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
int main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  ll ret = 0;
  vector<int> prime(1e6 + 5, true);
  prime[1] = false;
  for (int p = 2; p * p <= 1e6; p++) {
    if (prime[p]) {
      for (int i = p * p; i <= 1e6; i += p)
        prime[i] = false;
    }
  }
  for (ll i = 1; i <= n; i++) {
    for (ll j = 1; j <= n; j++) {
      if (i * j > n) {
        break;
      }
      if (n - (i * j) > 0) {
        ret++;
      }
    }
  }
  cout << ret << endl;
  return 0;
}


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

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

  ll count = 0;
  for (int c = 1; c <= n - 1; c++) {
    int N = n - c;
    for (int b = 1; b * b <= N; b++) {
      if (N % b == 0) {
        if (N / b == b)
          count += 1;
        else
          count += 2;
      }
    }
  }
  cout << count << endl;
  return 0;
}

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

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

  ll count = 0;
  for (int a = 1; a < n; a++) {
    if (n % a == 0) {
      count += n / a - 1;
    } else
      count += n / a;
  }
  cout << count << endl;

  return 0;
}


#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
using namespace std;
using ll = long long;

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);

      if (N / i != i)
        res.push_back(N / i);
    }
  }
  //  sort(res.begin(), res.end());
  return res;
}

int main() {
  ll cnt = 1;
  long long N;
  cin >> N;

  for (ll i = 2; i < N; ++i) {
    const auto &res = enum_divisors(i);
    cnt += res.size();
  }
  cout << cnt << endl;
}

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
using namespace std;
using ll = long long;
const int INF = 1000000009;
const ll LINF = 1e18;

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


// warm heart, wagging tail,and a smile just for you!
//                                                                     ███████████
//                                                                   ███╬╬╬╬╬╬╬╬╬╬███
//                                                                ███╬╬╬╬╬████╬╬╬╬╬╬███
//                                            ███████████
//                                            ██╬╬╬╬╬████╬╬████╬╬╬╬╬██
//                                      █████████╬╬╬╬╬████████████╬╬╬╬╬██╬╬╬╬╬╬███╬╬╬╬╬██
//                               ████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬██╬╬╬╬╬╬╬██
//                             ████╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬╬╬╬╬╬██
//                           ███╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬███╬╬╬╬╬╬╬█████
//                         ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬████████╬╬╬╬╬██
//                       ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬███
//                     ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬██
//                 ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬████
//     █████████████╬╬╬╬╬╬╬╬██╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬██████
//   ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬╬╬╬███████████╬╬╬╬╬╬╬╬██╬╬╬██╬╬╬██
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬██
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬▓▓▓▓▓▓╬╬╬████╬╬████╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬███
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬█████
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████
//   ███╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
//       ██████████████
//       ████╬╬╬╬╬╬███████████████████████████╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████
//                         ███████                           █████
//                         ███████████████████
//
#include "bits/stdc++.h"
using namespace std;
#define INF (1 << 30)
#define LINF (1LL << 60)
#define fs first
#define sc second
#define int long long
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FOR2(i, a, b) for (int i = (a); i <= (b); ++i)
#define RFOR(i, a, b) for (int i = (b - 1); i >= (a); --i)
#define RFOR2(i, a, b) for (int i = (b); i >= (a); --i)
#define REP(i, n) FOR(i, 0, (n))
#define REP2(i, n) FOR2(i, 0, (n))
#define RREP(i, n) RFOR(i, 0, (n))
#define RREP2(i, n) RFOR2(i, 0, (n))
#define ITR(itr, mp) for (auto itr = (mp).begin(); itr != (mp).end(); ++itr)
#define RITR(itr, mp) for (auto itr = (mp).rbegin(); itr != (mp).rend(); ++itr)
#define range(i, a, b) ((a) <= (i) && (i) < (b))
#define range2(i, a, b) ((a) <= (i) && (i) <= (b))
#define debug(x) cout << #x << " = " << (x) << endl
#define SP << " " <<
template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return true;
  } else
    return false;
}
template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return true;
  } else
    return false;
}
#define MSB(x) (63 - __builtin_clzll(x))
#define pcnt(x) (__builtin_popcountll(x))
#define parity(i, j) (i & (1LL << j))
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef vector<int> vec;
typedef vector<vector<int>> mat;

vector<int> divisor(const int n) {
  vector<int> ret;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n)
        ret.push_back(n / i);
    }
  }
  sort(ret.begin(), ret.end());
  return ret;
}

void solve() {
  int N;
  cin >> N;

  int ans = 0;
  FOR2(i, 1, N) {
    vec d = divisor(N - i);
    ans += d.size();
  }

  cout << ans << endl;
}

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

  int T = 1;
  // cin >> T;

  while (T--)
    solve();

  return 0;
}

// warm heart, wagging tail,and a smile just for you!
//                                                                     ███████████
//                                                                   ███╬╬╬╬╬╬╬╬╬╬███
//                                                                ███╬╬╬╬╬████╬╬╬╬╬╬███
//                                            ███████████
//                                            ██╬╬╬╬╬████╬╬████╬╬╬╬╬██
//                                      █████████╬╬╬╬╬████████████╬╬╬╬╬██╬╬╬╬╬╬███╬╬╬╬╬██
//                               ████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬██╬╬╬╬╬╬╬██
//                             ████╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬╬╬╬╬╬██
//                           ███╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬███╬╬╬╬╬╬╬█████
//                         ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬████████╬╬╬╬╬██
//                       ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬███
//                     ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬██
//                 ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬████
//     █████████████╬╬╬╬╬╬╬╬██╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬██████
//   ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬╬╬╬███████████╬╬╬╬╬╬╬╬██╬╬╬██╬╬╬██
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬██
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬▓▓▓▓▓▓╬╬╬████╬╬████╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬███
// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬█████
// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████
//   ███╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
//       ██████████████
//       ████╬╬╬╬╬╬███████████████████████████╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████
//                         ███████                           █████
//                         ███████████████████
//
#include "bits/stdc++.h"
using namespace std;
#define INF (1 << 30)
#define LINF (1LL << 60)
#define fs first
#define sc second
#define int long long
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FOR2(i, a, b) for (int i = (a); i <= (b); ++i)
#define RFOR(i, a, b) for (int i = (b - 1); i >= (a); --i)
#define RFOR2(i, a, b) for (int i = (b); i >= (a); --i)
#define REP(i, n) FOR(i, 0, (n))
#define REP2(i, n) FOR2(i, 0, (n))
#define RREP(i, n) RFOR(i, 0, (n))
#define RREP2(i, n) RFOR2(i, 0, (n))
#define ITR(itr, mp) for (auto itr = (mp).begin(); itr != (mp).end(); ++itr)
#define RITR(itr, mp) for (auto itr = (mp).rbegin(); itr != (mp).rend(); ++itr)
#define range(i, a, b) ((a) <= (i) && (i) < (b))
#define range2(i, a, b) ((a) <= (i) && (i) <= (b))
#define debug(x) cout << #x << " = " << (x) << endl
#define SP << " " <<
template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return true;
  } else
    return false;
}
template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return true;
  } else
    return false;
}
#define MSB(x) (63 - __builtin_clzll(x))
#define pcnt(x) (__builtin_popcountll(x))
#define parity(i, j) (i & (1LL << j))
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef vector<int> vec;
typedef vector<vector<int>> mat;

vector<int> divisor(const int n) {
  vector<int> ret;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n)
        ret.push_back(n / i);
    }
  }
  sort(ret.begin(), ret.end());
  return ret;
}

void solve() {
  int N;
  cin >> N;

  int ans = 0;
  FOR2(i, 1, N) { ans += (N - 1) / i; }

  cout << ans << endl;
}

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

  int T = 1;
  // cin >> T;

  while (T--)
    solve();

  return 0;
}


#include <bits/stdc++.h>
#define ll long long
using namespace std;
long long arr[1000007];
long long cs[1000007];
long long ps[1000007];
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
int main() {
  long long n;
  cin >> n;
  long long cnt = 0;

  for (long long i = 1; i <= n - 1; i++) {
    set<int> st;

    for (long long j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        st.insert(j);
        st.insert(i / j);
      }
    }

    // cout<<i<<" "<<st.size()<<endl;

    cnt += st.size();
  }

  cout << cnt << endl;

  return 0;
}

#include <bits/stdc++.h>
#define ll long long
using namespace std;
long long arr[1000007];
long long cs[1000007];
long long ps[1000007];

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

  long long cnt = 0;

  for (int i = 1; i <= n; i++) {
    cnt += n / i;
  }

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


#include <bits/stdc++.h>
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() {
  long long N;
  cin >> N;
  long long kake_count = 0;

  for (int i = 1; i <= N - 1; ++i) {
    long long kakeru = i;
    long long tasu = N - 1;
    if (kakeru == 1) {
      kake_count += 1;
    } else {
      auto res = enum_divisors(kakeru);
      kake_count += res.size();
    }
  }

  cout << kake_count << endl;
}

#include <bits/stdc++.h>
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() {
  long long N;
  cin >> N;
  long long kake_count = 0;

  vector<long long> cnt(N + 1, 1);
  for (int i = 2; i <= N - 1; ++i) {
    for (int j = i; j <= N - 1; j += i) {
      cnt[j]++;
    }
  }
  long long ans = 0;
  for (int i = 1; i <= N - 1; ++i) {
    ans += cnt[i];
  }

  cout << ans << endl;

  // for(int i=1; i<=N-1; ++i){
  //     long long kakeru = i;
  //     long long tasu = N-1;
  //     // if(kakeru == 1){
  //     //     kake_count +=1;
  //     // }else{
  //     //     auto res = enum_divisors(kakeru);
  //     //     kake_count += res.size();
  //     // }
  // }

  // cout << kake_count << endl;
}


#include <algorithm>
#include <assert.h>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <math.h>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;

const unsigned long long MOD = (unsigned long long)(1e9 + 7);

#define FROM_0(i, n) for (int i = 0; i < (n); i++)
#define FROM_S(i, s, e) for (int i = (s); i < (e); i++)
#define ITER_BEGIN_END(iter, vec)                                              \\
  for (auto iter = vec.begin(); iter != vec.end(); iter++)

unsigned long long count(int ab) {
  unsigned long long ret = 0;
  int end = sqrt(ab);
  FROM_S(i, 1, end + 1) {
    if (ab % i == 0) {
      ret += i * i == ab ? 1 : 2;
    }
  }
  // cout << ab << ' ' << ret << endl;
  return ret;
}

int main() {
  int n;
  cin >> n;
  unsigned long long result = 0;
  FROM_S(c, 1, n) {
    int ab = n - c;
    result += count(ab);
  }
  cout << result << endl;
  return 0;
}


#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
using ll = long long;
#define rep(i, n) for (ll i = 0; i < (n); i++)
#define rep2(i, s, n) for (ll i = s; i < (n); i++)
using namespace std;

int main() {
  ll n;
  cin >> n;
  ll ans = 0;
  rep2(i, 1, n) {
    ll rn = sqrt(i);
    ll temp = 0;
    rep2(j, 1, rn + 1) {
      if (i % j == 0)
        temp++;
    }
    ans += temp * 2;
    if (i == rn * rn)
      ans--;
  }
  cout << ans << endl;

  return 0;
}

#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
using ll = long long;
#define rep(i, n) for (ll i = 0; i < (n); i++)
#define rep2(i, s, n) for (ll i = s; i < (n); i++)
using namespace std;

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

  return 0;
}


// #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define black_tree                                                             \\
  tree<ll, null_type, less_equal<ll>, rb_tree_tag,                             \\
       tree_order_statistics_node_update>
#define pair_black_tree                                                        \\
  tree<pair<ll, ll>, null_type, less<pair<ll, ll>>, rb_tree_tag,               \\
       tree_order_statistics_node_update>
#define gp __gnu_pbds
#define INF 1000000000
#define MOD 1000000007
#define MAX 1000000
#define endl '\\n'
#define ll long long
#define ld long double
#define lli long long int
#define ull unsigned long long
#define ulli unsigned long long int
#define pb push_back
#define pf push_front
#define ook order_of_key
#define fbo find_by_order
#define np next_permutation
#define mp make_pair
#define eb emplace_back
#define mae max_element
#define mie min_element
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define ff first
#define ss second
using namespace std;
using namespace gp;
ll n, ans, primes[MAX];
ll check(ll n) {
  ll ans = 1, cnt;
  for (int i = 2; i <= n; i++) {
    if (primes[i] == 0) {
      cnt = 1;
      while (n % i == 0) {
        n /= i;
        cnt++;
      }
      ans *= cnt;
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 2; i * i < n; i++) {
    if (primes[i] == 0) {
      for (int j = i * 2; j < n; j += i) {
        primes[j] = 1;
      }
    }
  }
  for (int i = 1; i < n; i++) {
    ans += check(i);
  }
  cout << ans;
}

// #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define black_tree                                                             \\
  tree<ll, null_type, less_equal<ll>, rb_tree_tag,                             \\
       tree_order_statistics_node_update>
#define pair_black_tree                                                        \\
  tree<pair<ll, ll>, null_type, less<pair<ll, ll>>, rb_tree_tag,               \\
       tree_order_statistics_node_update>
#define gp __gnu_pbds
#define INF 1000000000
#define MOD 1000000007
#define MAX 1000000
#define endl '\\n'
#define ll long long
#define ld long double
#define lli long long int
#define ull unsigned long long
#define ulli unsigned long long int
#define pb push_back
#define pf push_front
#define ook order_of_key
#define fbo find_by_order
#define np next_permutation
#define mp make_pair
#define eb emplace_back
#define mae max_element
#define mie min_element
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define ff first
#define ss second
using namespace std;
using namespace gp;
ll n, ans;
ll check(ll n) {
  ll ans = 1, cnt;
  for (int i = 2; i <= sqrt(n); i++) {
    cnt = 1;
    while (n % i == 0) {
      n /= i;
      cnt++;
    }
    ans *= cnt;
  }
  if (n > 1) {
    ans *= 2;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i < n; i++) {
    ans += check(i);
  }
  cout << ans;
}


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

#define watch(x) cout << (#x) << " is " << (x) << "\\n"
#define watch2(x, y)                                                           \\
  cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << "\\n"
#define watch3(x, y, z)                                                        \\
  cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << " and " \\
       << (#z) << " is " << (z) << "\\n"

#define ll long long
#define ff first
#define ss second
#define null NULL
#define all(c) (c).begin(), (c).end()
#define nl "\\n"

#define ld long double
#define eb emplace_back
#define pb push_back
#define pf push_front
#define mod 1000000007

typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<ll, ll> pll;
typedef map<ll, ll> mll;

ll countdiv(ll n) {

  vector<ll> hashv(n + 1, 1);
  for (ll p = 2; p * p < n; p++) {
    if (hashv[p] == 1) {
      for (ll i = p * 2; i < n; i += p)
        hashv[i] = 0;
    }
  }

  ll ans = 1;
  for (ll p = 2; p <= n; p++) {
    if (hashv[p]) {
      ll count = 0;
      if (n % p == 0) {
        while (n % p == 0) {
          n = n / p;
          count++;
        }

        ans = ans * (count + 1);
      }
    }
  }

  return ans;
}

int main() {

  // Use ctrl+shift+b ( second option )
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);

#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif

  ll n;
  cin >> n;

  ll ans = 0;
  for (ll i = 1; i < n; i++) {
    ans += countdiv(n - i);
  }

  cout << ans << nl;

  return 0;
}

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

#define watch(x) cout << (#x) << " is " << (x) << "\\n"
#define watch2(x, y)                                                           \\
  cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << "\\n"
#define watch3(x, y, z)                                                        \\
  cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << " and " \\
       << (#z) << " is " << (z) << "\\n"

#define ll long long
#define ff first
#define ss second
#define null NULL
#define all(c) (c).begin(), (c).end()
#define nl "\\n"

#define ld long double
#define eb emplace_back
#define pb push_back
#define pf push_front
#define mod 1000000007

typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<ll, ll> pll;
typedef map<ll, ll> mll;

int main() {

  // Use ctrl+shift+b ( second option )
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);

#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif

  ll n;
  cin >> n;

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

  cout << ans << nl;

  return 0;
}


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

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ll n;
  cin >> n;
  ll cnt = 0;
  for (ll i = 1; i < n; i++) {
    ll num = n - i;
    for (ll j = 1; j <= sqrt(num); j++) {
      if ((num % j) == 0) {
        ll num1 = j, num2 = num / j;
        if (num1 == num2)
          cnt++;
        else
          cnt += 2;
      }
    }
  }
  cout << cnt << "\\n";

  return 0;
}

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

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ll n;
  cin >> n;
  n--;
  // for(n=1;n<100;n++)
  //{
  ll cnt = 0;
  for (ll i = 1; i <= n; i++) {
    cnt += (n / i);
  }

  cout << cnt << "\\n";

  return 0;
}


#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  long long int count = 0;
  for (int i = 1; i < n; ++i) {
    for (int j = 1; j * j <= i; ++j) {
      if (i % j == 0) {
        count++;
        if (i / j != j)
          count++;
      }
    }
  }
  cout << count << '\\n';
  return 0;
}

#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
using namespace std;

int primes[1000001];

void seive() {
  for (int i = 2; i <= 1000000; ++i) {
    if (primes[i] == 0) {
      for (int j = i; j <= 1000000; j += i) {
        if (primes[j] == 0)
          primes[j] = i;
      }
    }
  }
}

long long int getDiv(int n) {
  if (n == 1)
    return 1;
  map<int, int> m;
  int temp1 = n;
  while (n != 1) {
    int val = primes[n];
    n = n / val;
    m[val]++;
  }
  long long int temp = 1;
  for (auto &p : m) {
    temp *= ((long long int)p.second + 1);
  }
  return temp;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  seive();
  int n;
  cin >> n;
  long long int count = 0;
  for (int i = 1; i < n; ++i) {
    count += getDiv(i);
  }
  cout << count << '\\n';
  return 0;
}


#include <bits/stdc++.h>
#include <fstream>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef pair<ll, ll> llP;

ll mod(ll a, ll b) {
  ll ret = a % b;
  if (ret < 0)
    ret += b;
  return ret;
}

ll modpow(ll a, ll b, ll c) {
  ll res = 1;
  while (b > 0) {
    if (b & 1)
      res = mod(res * a, c);
    a = mod(a * a, c);
    b >>= 1;
  }
  return res;
}

int GCD(int x, int y) {
  if (x < y) {
    swap(x, y);
  }
  while (x % y != 0) {
    int temp = x;
    x = y;
    y = temp % y;
  }
  return y;
}

int digitsum(int x) {
  int sum = 0;
  while (x > 0) {
    sum += (x % 10);
    x /= 10;
  }
  return sum;
}

int main() {
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i <= n - 1; i++) {
    int cnt = 0;
    int cur;
    for (int j = 1; j <= sqrt(i); j++) {
      if (i % j == 0) {
        cnt++;
        cur = j;
      }
    }
    if (cur * cur == i)
      cnt = 2 * cnt - 1;
    else
      cnt *= 2;
    ans += cnt;
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
#include <fstream>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef pair<ll, ll> llP;

ll mod(ll a, ll b) {
  ll ret = a % b;
  if (ret < 0)
    ret += b;
  return ret;
}

ll modpow(ll a, ll b, ll c) {
  ll res = 1;
  while (b > 0) {
    if (b & 1)
      res = mod(res * a, c);
    a = mod(a * a, c);
    b >>= 1;
  }
  return res;
}

int GCD(int x, int y) {
  if (x < y) {
    swap(x, y);
  }
  while (x % y != 0) {
    int temp = x;
    x = y;
    y = temp % y;
  }
  return y;
}

int digitsum(int x) {
  int sum = 0;
  while (x > 0) {
    sum += (x % 10);
    x /= 10;
  }
  return sum;
}

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


#include <bits/stdc++.h>

#define crap                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define db1(x) cout << #x << "=" << x << '\\n'
#define db2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << '\\n'
#define db3(x, y, z)                                                           \\
  cout << #x << "=" << x << "," << #y << "=" << y << "," << #z << "=" << z     \\
       << '\\n'
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define repA(i, a, n) for (int i = a; i <= (n); ++i)
#define repD(i, a, n) for (int i = a; i >= (n); --i)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define CN cout << "No\\n"
#define CY cout << "Yes\\n"

using namespace std;
using ll = long long;
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
// #define MAXN 1000001
// ll sieve[MAXN];
// void makesieve()
// {
//     sieve[1] = 1;
//     for (int i = 2; i < MAXN; i++)
//         sieve[i] = i;
//     for (int i = 4; i < MAXN; i += 2)
//         sieve[i] = 2;
//     for (int i = 3; i * i < MAXN; i++) {
//         if (sieve[i] == i) {
//             for (int j = i * i; j < MAXN; j += i)
//                 if (sieve[j] == j)
//                     sieve[j] = i;
//         }
//     }
// }
ll powerflow(ll x, ll n) {
  ll res;
  if (n == 0) {
    return 1;
  }
  res = powerflow(x, n - 1); // recurse
  if (INT_MAX / res < x) {   // check for overflow
    return -1;               // LONG_MAX;
  }
  return x * res;
}
ll mod = 1000000007;
ll power(ll a, ll b, ll m) {
  a %= m;
  b %= m;
  ll res = 1;
  while (b != 0) {
    if (b & 1)
      res = (res * a);
    b = b / 2;
    a = (a * a) % mod;
  }
  return res;
}
struct compare {
  bool operator()(const int &l, const int &r) { return l > r; }
};
void solve() {
  ll n;
  cin >> n;
  ll ans = 0;
  for (int i = 1; i < n; i++) {
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        ans++;
        if (i / j != j)
          ans++;
      }
    }
  }
  cout << ans;
}
int main() {
  crap;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  int t;
  t = 1;
  // cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}

#include <bits/stdc++.h>

#define crap                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define db1(x) cout << #x << "=" << x << '\\n'
#define db2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << '\\n'
#define db3(x, y, z)                                                           \\
  cout << #x << "=" << x << "," << #y << "=" << y << "," << #z << "=" << z     \\
       << '\\n'
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define repA(i, a, n) for (int i = a; i <= (n); ++i)
#define repD(i, a, n) for (int i = a; i >= (n); --i)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define CN cout << "No\\n"
#define CY cout << "Yes\\n"

using namespace std;
using ll = long long;
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
// #define MAXN 1000001
// ll sieve[MAXN];
// void makesieve()
// {
//     sieve[1] = 1;
//     for (int i = 2; i < MAXN; i++)
//         sieve[i] = i;
//     for (int i = 4; i < MAXN; i += 2)
//         sieve[i] = 2;
//     for (int i = 3; i * i < MAXN; i++) {
//         if (sieve[i] == i) {
//             for (int j = i * i; j < MAXN; j += i)
//                 if (sieve[j] == j)
//                     sieve[j] = i;
//         }
//     }
// }
ll powerflow(ll x, ll n) {
  ll res;
  if (n == 0) {
    return 1;
  }
  res = powerflow(x, n - 1); // recurse
  if (INT_MAX / res < x) {   // check for overflow
    return -1;               // LONG_MAX;
  }
  return x * res;
}
ll mod = 1000000007;
ll power(ll a, ll b, ll m) {
  a %= m;
  b %= m;
  ll res = 1;
  while (b != 0) {
    if (b & 1)
      res = (res * a);
    b = b / 2;
    a = (a * a) % mod;
  }
  return res;
}
struct compare {
  bool operator()(const int &l, const int &r) { return l > r; }
};
const int MAX = 1000001;

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

// function to generate all prime factors
// of numbers from 1 to 10^6
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;
      }
    }
  }
}

// function to calculate number of factors
int cc(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;
}
void solve() {
  generatePrimeFactors();
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    ans += cc(i);
  }
  cout << ans;
}
int main() {
  crap;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  int t;
  t = 1;
  // cin>>t;
  while (t--) {
    solve();
  }
  return 0;
}


#include <bits/stdc++.h>
#define Int int64_t

using namespace std;

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

  Int ans = 0;
  for (Int C = 1; C < N; ++C) {
    Int n = N - C;
    for (Int A = 1; A * A <= n; ++A) {
      if (n % A != 0) {
        continue;
      }
      if (A * A == n) {
        ans += 1;
      } else {
        ans += 2;
      }
    }
  }
  cout << ans << "\\n";

  return 0;
}

#include <bits/stdc++.h>
#define Int int64_t

using namespace std;

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

  Int ans = 0;
  for (int a = 1; a <= N; ++a) {
    for (int b = 1; a * b < N; ++b) {
      ++ans;
    }
  }
  cout << ans << "\\n";

  return 0;
}


#include <bits/stdc++.h>

using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 2; i <= n - 1; i++) {
    for (int j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        if (j == i / j) {
          ans++;
        } else {
          ans += 2;
        }
      }
    }
  }
  cout << ans + 1 << endl;
}

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

#define ff first
#define ss second
#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define vi vector<int>
#define mii map<int, int>
#define pqb priority_queue<int>
#define pqs priority_queue<int, vi, greater<int>>
#define setbits(x) __builtin_popcountll(x)
#define zrobits(x) __builtin_ctzll(x)
#define mod 1000000007
#define inf 1e18
#define ps(x, y) fixed << setprecision(y) << x
#define mk(arr, n, type) type *arr = new type[n];
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)

int32_t main() {

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


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define REP(i, f, n) for (int i = f; i < (n); i++)
int m_x[4] = {0, 0, -1, 1};
int m_y[4] = {-1, 1, 0, 0};

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

  for (int i = 1; i * i <= n; i++) {
    REP(j, 1, n) {
      int a = n - j;
      if (i * i <= a)
        if (a % i == 0) {
          ans++;
          // 重複しないならば i の相方である N/i も push
          if (a / i != i)
            ans++; // cotae[j]++;
        }
    }
  }
  cout << ans << endl;

  //--debug : end_stoper
  // string end_stoper; cin >> end_stoper;

  return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define REP(i, f, n) for (int i = f; i < (n); i++)

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

  REP(a, 1, n) { ans += (n - 1) / a; }
  cout << ans << endl;

  //--debug : end_stoper
  // string end_stoper; cin >> end_stoper;

  return 0;
}


#include <algorithm>
#include <bitset>
#include <cassert>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <valarray>
#include <vector>
#define _GLIBCXX_DEBUG
#define INF 100000010
#define PI 3.14159265359

using namespace std;
const int64_t mod = 1000000007;
const int64_t tmpMod = 998244353;

int num(int n) {
  // cout<<n<<endl;
  vector<int> x(n + 1);
  int num = n; // 素因数分解する変数num
  int sq = n;  // 素因数分解する変数num
  int aaa = n;
  int ans = 1;
  bool s = false;

  for (int i = 2; i <= n; i++) {
    while (num % i == 0) {
      if (double(i) == double(sqrt(sq)))
        s = true;
      x.at(i)++;
      num /= i;
    }
  }

  for (int i = 2; i <= n; i++) {
    ans *= x.at(i) + 1;
  }
  // return ans;
  // if(s)cout<<aaa<<endl;
  // cout<<'s'<<endl;
  // cout<<ans<<endl;
  // return fmod(sqrt(n),0)==0 ? ans : ans*2;
  return ans;
}

int main() {

  int64_t N, a = 1, b, c;
  cin >> N;
  // vector<int64_t> A(N);
  for (int i = 2; i < N; i++) {
    // cout<<i<<" "<<num(i)<<endl;
    a += num(i);
  }
  // vector<vector<int> > A(N,vector<int>(M));
  // for(int i=0; i<N; i++){
  //    for(int j=0; j<M; j++){
  //        cin>>A[i][j];
  //    }
  //  }
  // sort(A.begin(),A.end());
  // for (int i = 0; i < N; i++) { maximum = max(maximum , A[i]);}
  // for (int i = 0; i < N; i++) { minimum = min(minimum , A[i]);}
  cout << a << endl;
}

#include <algorithm>
#include <bitset>
#include <cassert>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <valarray>
#include <vector>
#define _GLIBCXX_DEBUG
#define INF 100000010
#define PI 3.14159265359

using namespace std;
const int64_t mod = 1000000007;
const int64_t tmpMod = 998244353;

int num(int n) {
  // cout<<n<<endl;
  vector<int> x(n + 1);
  int num = n; // 素因数分解する変数num
  int sq = n;  // 素因数分解する変数num
  int aaa = n;
  int ans = 1;
  bool s = false;

  for (int i = 2; (i - 1) * (i - 1) <= n; i++) {
    while (num % i == 0) {
      // if(double(i)==double(sqrt(sq)))s=true;
      x.at(i)++;
      num /= i;
    }
  }
  if (num == n)
    x[n] = 1;
  for (int i = 2; i * i <= n; i++) {
    ans *= x.at(i) + 1;
  }
  ans *= x.at(n) + 1;
  // return ans;
  // if(s)cout<<aaa<<endl;
  // cout<<'s'<<endl;
  // cout<<ans<<endl;
  // return fmod(sqrt(n),0)==0 ? ans : ans*2;
  return ans;
}

int main() {

  int64_t N, a = 1, b, c;
  cin >> N;
  // vector<int64_t> A(N);
  for (int i = 2; i < N; i++) {
    a += 2;
    // cout<<i<<" "<<num(i)<<endl;
    for (int j = 2; j * j <= i; j++) {
      if (i % j == 0)
        a += 2;
    }
    if (fmod(sqrt(i), 1) == 0)
      a--;
    // a+=num(i);
  }
  // vector<vector<int> > A(N,vector<int>(M));
  // for(int i=0; i<N; i++){
  //    for(int j=0; j<M; j++){
  //        cin>>A[i][j];
  //    }
  //  }
  // sort(A.begin(),A.end());
  // for (int i = 0; i < N; i++) { maximum = max(maximum , A[i]);}
  // for (int i = 0; i < N; i++) { minimum = min(minimum , A[i]);}
  cout << a << endl;
}


#include <bits/stdc++.h>
#define ll long long int
#define mk make_pair
#define pb push_back
#define INF (ll)1e18
#define pii pair<ll, ll>
#define mod 1000000007 // 998244353
#define f(i, a, b) for (ll i = a; i < b; i++)
#define fb(i, a, b) for (ll i = a; i > b; i--)
#define ff first
#define ss second
#define srt(v)                                                                 \\
  if (!v.empty())                                                              \\
  sort(v.begin(), v.end())
#define PI 3.141592653589793238
#define pq priority_queue<ll>
#define pqr priority_queue<ll, vector<ll>, greater<ll>()>
using namespace std;
ll pow_mod(ll a, ll b) {
  ll res = 1;
  while (b != 0) {
    if (b & 1) {
      res = (res * a) % mod;
    }
    a = (a * a) % mod;
    b /= 2;
  }
  return res;
}
void solve() {
  ll n;
  cin >> n;

  ll ans = 0;

  if (n != 1) {

    for (ll i = 1; i < n; i++) {
      ll x = n - i;

      ll res = 0;

      for (ll j = 1; j * j <= x; j++) {
        if (x % j == 0) {
          res++;

          if (j * j != x)
            res++;
        }
      }
      ans += res;
    }
  }
  cout << ans << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  // Start from Here.

  ll t;
  t = 1;
  // cin>>t;
  while (t--)
    solve();

  // Good Bye!
  return 0;
}

#include <bits/stdc++.h>
#define ll long long int
#define mk make_pair
#define pb push_back
#define INF (ll)1e18
#define pii pair<ll, ll>
#define mod 1000000007 // 998244353
#define f(i, a, b) for (ll i = a; i < b; i++)
#define fb(i, a, b) for (ll i = a; i > b; i--)
#define ff first
#define ss second
#define srt(v)                                                                 \\
  if (!v.empty())                                                              \\
  sort(v.begin(), v.end())
#define PI 3.141592653589793238
#define pq priority_queue<ll>
#define pqr priority_queue<ll, vector<ll>, greater<ll>()>
using namespace std;
ll pow_mod(ll a, ll b) {
  ll res = 1;
  while (b != 0) {
    if (b & 1) {
      res = (res * a) % mod;
    }
    a = (a * a) % mod;
    b /= 2;
  }
  return res;
}
ll l[1000001];
bool mark[1000001];
void solve() {
  ll n;
  cin >> n;

  ll ans = 0;

  if (n != 1) {
    // ll res=1;
    for (ll i = 1; i < n; i++) {
      ll x = n - i;
      ll res = 1;
      while (l[x] > 1) {
        ll tmp = 0;
        ll y = l[x];

        while (x > 1 && x % y == 0) {
          x /= y;
          tmp++;
        }

        res *= (1 + tmp);
      }

      ans += res;
    }
  }
  cout << ans << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  // Start from Here.
  memset(mark, false, sizeof(mark));

  l[1] = 1;
  for (ll i = 2; i < 1000001; i++) {
    if (!mark[i]) {
      l[i] = i;

      for (ll j = i * i; j < 1000001; j += i) {
        if (!mark[j]) {
          mark[j] = true;
          l[j] = i;
        }
      }
    }
  }
  ll t;
  t = 1;
  // cin>>t;
  while (t--)
    solve();

  // Good Bye!
  return 0;
}


#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <bitset>    // bitset
#include <cctype>    // isupper, islower, isdigit, toupper, tolower
#include <cstdint>   // int64_t, int*_t
#include <cstdio>    // printf
#include <deque>     // deque
#include <iostream>  // cout, endl, cin
#include <map>       // map
#include <memory>    // unique_ptr, shared_ptr, weak_ptr
#include <queue>     // queue, priority_queue
#include <set>       // set
#include <stack>     // stack
#include <string>    // string, to_string, stoi
#include <tuple>     // tuple, make_tuple
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <utility>       // pair, make_pair
#include <vector>        // vector

using namespace std;

using ll = long long int;
using vi = vector<int>;
using vvi = vector<vi>;

#define _LIBCPP_DEBUG 0
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()

const int INF = 1 << 30;
const ll MOD = 1000000007;

int main() {
  int n, cnt = 0;
  cin >> n;

  // A*B+C == N
  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; i++) {
      if (i * j < n)
        cnt++;
    }
  }
  cout << cnt << endl;

  return 0;
}

#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <bitset>    // bitset
#include <cctype>    // isupper, islower, isdigit, toupper, tolower
#include <cstdint>   // int64_t, int*_t
#include <cstdio>    // printf
#include <deque>     // deque
#include <iostream>  // cout, endl, cin
#include <map>       // map
#include <memory>    // unique_ptr, shared_ptr, weak_ptr
#include <queue>     // queue, priority_queue
#include <set>       // set
#include <stack>     // stack
#include <string>    // string, to_string, stoi
#include <tuple>     // tuple, make_tuple
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <utility>       // pair, make_pair
#include <vector>        // vector

using namespace std;

using ll = long long int;
using vi = vector<int>;
using vvi = vector<vi>;

#define _LIBCPP_DEBUG 0
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()

const int INF = 1 << 30;
const ll MOD = 1000000007;

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

  for (auto i = 1; i <= N; i++) {
    for (auto j = 1; i * j <= N; j++) {
      long long c = N - i * j;
      if (c > 0)
        cnt++;
    }
  }
  cout << cnt << endl;

  return 0;
}


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

vector<int> getDivisors(int n) {
  vector<int> res;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i) {
        res.push_back(i);
      } else {
        res.push_back(i);
        res.push_back(n / i);
      }
    }
  }
  return res;
}

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

  int n, ans = 0;
  cin >> n;
  set<pair<pair<int, int>, int>> st;
  for (int i = 1; i <= n; i++) {
    int x = n - i;
    vector<int> vt = getDivisors(x);
    for (int j = 0; j < vt.size(); j++) {
      st.insert({{x / vt[j], vt[j]}, i});
    }
  }
  cout << st.size();
}

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

vector<int> getDivisors(int n) {
  vector<int> res;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i) {
        res.push_back(i);
      } else {
        res.push_back(i);
        res.push_back(n / i);
      }
    }
  }
  return res;
}

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

  int n, ans = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; i * j <= n; j++) {
      if (n - i * j > 0)
        ans++;
    }
  }
  cout << ans << "\\n";
}


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

// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;

#define int long long
#define mod 1000000007
#define pb push_back
#define S second
#define F first
#define INF 1e18
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>

#define deb(x) cerr << "\\n" << #x << "=" << x << "\\n";
#define deb2(x, y)                                                             \\
  cerr << "\\n" << #x << "=" << x << "\\n" << #y << "=" << y << "\\n";
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)
vector<int> seive(int n) {
  vector<bool> isPrime(n + 1, 1);
  isPrime[1] = 1;

  for (int i = 2; i * i <= n; ++i) {
    if (isPrime[i]) {
      for (int j = i * i; j <= n; j += i) {
        isPrime[j] = 0;
      }
    }
  }
  vector<int> prime;
  for (int i = 1; i <= n; ++i)
    if (isPrime[i])
      prime.pb(i);
  return prime;
}
int32_t main() {

  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  int ans = 0;
  // vector<int> primes = seive(n + 2);
  for (int i = 1; i <= n - 1; ++i) {
    int sum = n - i;

    for (int j = 1; j * j <= sum; ++j) {
      if (sum % j == 0) {
        ans++;
        if (sum / j != j)
          ans++;
      }
    }
  }
  cout << ans;
  return 0;
}

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

// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;

#define int long long
#define mod 1000000007
#define pb push_back
#define S second
#define F first
#define INF 1e18
#define ordered_set                                                            \\
  tree<int, null_type, less<int>, rb_tree_tag,                                 \\
       tree_order_statistics_node_update>

#define deb(x) cerr << "\\n" << #x << "=" << x << "\\n";
#define deb2(x, y)                                                             \\
  cerr << "\\n" << #x << "=" << x << "\\n" << #y << "=" << y << "\\n";
#define w(x)                                                                   \\
  int x;                                                                       \\
  cin >> x;                                                                    \\
  while (x--)

#define MAXN 1000002

// stores smallest prime factor for every number
int spf[MAXN];

// Calculating SPF (Smallest Prime Factor) for every
// number till MAXN.
// Time Complexity : O(nloglogn)
void sieve() {
  spf[1] = 1;
  for (int i = 2; i < MAXN; i++)

    // marking smallest prime factor for every
    // number to be itself.
    spf[i] = i;

  // separately marking spf for every even
  // number as 2
  for (int i = 4; i < MAXN; i += 2)
    spf[i] = 2;

  for (int i = 3; i * i < MAXN; i++) {
    // checking if i is prime
    if (spf[i] == i) {
      // marking SPF for all numbers divisible by i
      for (int j = i * i; j < MAXN; j += i)

        // marking spf[j] if it is not
        // previously marked
        if (spf[j] == j)
          spf[j] = i;
    }
  }
}

int getFactorization(int x) {
  vector<int> ret;
  int prev = -1;
  int cnt = 0, ans = 1ll;
  while (x != 1) {
    if (spf[x] == prev)
      cnt++;
    else {
      ans *= (cnt + 1);
      prev = spf[x];
      cnt = 1;
    }
    x = x / spf[x];
  }
  if (cnt > 0)
    ans *= (cnt + 1);
  return ans;
}

int32_t main() {

  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  int ans = 0;
  sieve();
  for (int i = 1; i <= n - 1; ++i) {
    int sum = n - i;
    ans += getFactorization(sum);
  }
  cout << ans;
  return 0;
}


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

int main() {
  int n, cnt = 0, ans = 0;
  cin >> n;
  fo(i, n) {
    if (n % i == 0)
      ans += (n / i) - 1;
    else
      ans += (n / i);
  }
  cout << ans;
  return 0;
}

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int MOD = 1e9 + 7;

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


#include <iostream>
#include <string>
using namespace std;
int main() {
  long a, b, c, n;
  long i, j;
  unsigned long ans = 0;

  cin >> n;
  for (i = 1; i <= n - 1; i++) {
    for (a = 1; a * a <= i; a++) {
      if (i % a == 0) {
        ans++;
        if (a * a != i) {
          ans++;
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}

#include <iostream>
#include <string>
using namespace std;
int main() {
  long a, b, c, n;
  long i, j;
  unsigned long ans = 1;
  unsigned long tmp, tmp2;

  cin >> n;
  for (i = 2; i <= n - 1; i++) {
    tmp = 1;
    j = i;
    for (a = 2; a * a <= j; a++) {
      if (j % a == 0) {
        tmp2 = 1;
        while (j % a == 0) {
          j = j / a;
          tmp2++;
        }
        tmp *= tmp2;
      }
    }
    if (j == 1) {
      ans += tmp;
    } else {
      ans += (tmp * 2);
    }
  }
  cout << ans << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pp pop_back
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define f0(i, a, n) for (i = a; i < n; i++)
#define f1(I, a, b) for (i = a; i <= b; i++)
#define stp setprecision
#define nl endl
#define ipt(a)                                                                 \\
  for (i = 0; i < n; i++)                                                      \\
    cin >> a[i];
#define pll pair<ll, ll>
#define vl vector<ll>
#define mp map<ll, ll>
int main() {
  fast;
  ll n, i, j;
  cin >> n;
  ll c = 0, s = 0, d = 1;
  for (i = 1; i <= n - 1; i++) {
    ll k = n - i, d = 1, c = sqrt(k);
    ll f = k, x = 0;
    while (k % 2 == 0) {
      x++;
      k = k / 2;
    }
    d = d * (x + 1);
    x = 0;

    for (j = 3; k > 1 && j <= f; j += 2) // Checking for every prime number
    {
      x = 0;
      while (k % j == 0) {
        x++;
        k /= j;
      }
      d = d * (x + 1);
    }
    if (k > 2) {
      x++;
      d = d * (x + 1);
    }

    if (f == 1)
      s++;
    else if (k > 2)
      s += 2;

    else
      s += d;
  }
  cout << s;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pp pop_back
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define f0(i, a, n) for (i = a; i < n; i++)
#define f1(I, a, b) for (i = a; i <= b; i++)
#define stp setprecision
#define nl endl
#define ipt(a)                                                                 \\
  for (i = 0; i < n; i++)                                                      \\
    cin >> a[i];
#define pll pair<ll, ll>
#define vl vector<ll>
#define mp map<ll, ll>
int main() {
  fast;
  ll n, i, j;
  cin >> n;
  ll c = 0, s = 0;
  for (i = 1; i <= n - 1; i++) {
    if (n % i)
      s += n / i;
    else
      s += n / i - 1;
  }
  cout << s;
}


#pragma optimization_level 3
#include <bits/stdc++.h>
#define f first
#define s second
#define sym(s) s = "#" + s + "#";
#define all(x) (x).begin(), (x).end()
#define alll(x, n) x + 1, x + n + 1
#define newl cout << "\\n";
#define foo(i, a, n) for (ll i = (a); i <= n; i++)
#define deb1(a) cout << a << "\\n";
#define deb2(a, b) cout << a << " " << b << "\\n";
#define deb3(a, b, c) cout << a << " " << b << " " << c << "\\n";
#define deb4(a, b, c, d) cout << a << " " << b << " " << c << " " << d << "\\n";
#define debp(a) cout << a.f << " " << a.s << "\\n";
#define debv(a)                                                                \\
  for (auto it : a)                                                            \\
    cout << it << " ";                                                         \\
  newl;
#define debm(a)                                                                \\
  for (auto it : a)                                                            \\
    cout << "{" << it.f << "," << it.s << "}, ";                               \\
  newl;
#define deb1d(a, n)                                                            \\
  foo(i, 1, n) cout << a[i] << " ";                                            \\
  newl;
#define deb2d(a, n, m)                                                         \\
  foo(i, 1, n) {                                                               \\
    foo(j, 1, m) { cout << a[i][j] << " "; }                                   \\
    newl;                                                                      \\
  }

using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 1e+9 + 7;
const ll INF = LLONG_MAX;
const int N = (int)2e+5 + 8;

ll n, a[N];
string s;

void MAIN(int tc) {
  cin >> n;
  ll res = 0;
  for (int c = 1; c <= n - 1; c++) {
    ll r = n - c, cnt = 0;
    for (int i = 1; i * i <= r; i++) {
      if (r % i == 0) {
        cnt++;
        if (i * i != r)
          cnt++;
      }
    }
    res += cnt;
  }
  deb1(res);
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout << fixed;
  cout << setprecision(10);

  int test_cases = 1;
  // cin>>test_cases;
  for (int i = 1; i <= test_cases; i++) {
    MAIN(i);
  }
}

#pragma optimization_level 3
#include <bits/stdc++.h>
#define f first
#define s second
#define sym(s) s = "#" + s + "#";
#define all(x) (x).begin(), (x).end()
#define alll(x, n) x + 1, x + n + 1
#define newl cout << "\\n";
#define foo(i, a, n) for (ll i = (a); i <= n; i++)
#define deb1(a) cout << a << "\\n";
#define deb2(a, b) cout << a << " " << b << "\\n";
#define deb3(a, b, c) cout << a << " " << b << " " << c << "\\n";
#define deb4(a, b, c, d) cout << a << " " << b << " " << c << " " << d << "\\n";
#define debp(a) cout << a.f << " " << a.s << "\\n";
#define debv(a)                                                                \\
  for (auto it : a)                                                            \\
    cout << it << " ";                                                         \\
  newl;
#define debm(a)                                                                \\
  for (auto it : a)                                                            \\
    cout << "{" << it.f << "," << it.s << "}, ";                               \\
  newl;
#define deb1d(a, n)                                                            \\
  foo(i, 1, n) cout << a[i] << " ";                                            \\
  newl;
#define deb2d(a, n, m)                                                         \\
  foo(i, 1, n) {                                                               \\
    foo(j, 1, m) { cout << a[i][j] << " "; }                                   \\
    newl;                                                                      \\
  }

using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 1e+9 + 7;
const ll INF = LLONG_MAX;
const int N = (int)2e+5 + 8;

ll n, a[N];
string s;

const ll N2 = 1e7 + 8;
ll p[N2];
void sieve() {
  for (ll i = 2; i * i <= N2; i++) {
    if (p[i] == 0) {
      for (ll j = 2 * i; j < N2; j += i) {
        if (p[j] == 0)
          p[j] = i; // for spf
      }
    }
  }

  foo(i, 1, N2 - 1) if (p[i] == 0) p[i] =
      i; // all numbers with p[i]=i, are primes
}

vector<pair<ll, ll>> prime_factorise(ll n) {
  vector<pair<ll, ll>> pf;
  while (n > 1) {
    if (pf.size() && pf.back().f == p[n]) {
      pair<ll, ll> p = pf.back();
      pf.pop_back();
      pf.push_back({p.f, p.s + 1});
    } else {
      pf.push_back({p[n], 1});
    }
    n /= p[n];
  }
  return pf;
}

void MAIN(int tc) {
  cin >> n;
  ll res = 0;
  for (int c = 1; c <= n - 1; c++) {
    ll r = n - c, cnt = 1;
    vector<pair<ll, ll>> pf = prime_factorise(r);
    for (auto [a, b] : pf)
      cnt *= (b + 1);
    res += cnt;
  }
  deb1(res);
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout << fixed;
  cout << setprecision(10);

  sieve();
  int test_cases = 1;
  // cin>>test_cases;
  for (int i = 1; i <= test_cases; i++) {
    MAIN(i);
  }
}


#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fi first
#define se second
using namespace std;
void solve() {
  int n;
  cin >> n;
  int spf[n + 1];
  for (int i = 0; i <= n; i++) {
    spf[i] = i;
  }
  for (int i = 2; i * i <= n; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j <= n; j += i) {
        if (spf[j] == j) {
          spf[j] = i;
        }
      }
    }
  }
  int ans = 0;
  for (int i = 1; i < n; i++) {
    int x = n - i;
    for (int j = 1; j * j <= x; j++) {
      if (x % j == 0) {
        if (j != x / j)
          ans += 2;
        else {
          ans++;
        }
      }
    }
  }
  cout << ans;
}
int32_t main() {
  ios_base::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    solve();
  }
}

#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fi first
#define se second
using namespace std;
void solve() {
  int n;
  cin >> n;
  int spf[n + 1];
  for (int i = 0; i <= n; i++) {
    spf[i] = i;
  }
  for (int i = 2; i * i <= n; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j <= n; j += i) {
        if (spf[j] == j) {
          spf[j] = i;
        }
      }
    }
  }
  int ans = 0;
  for (int i = 1; i < n; i++) {
    int x = n - i;
    int temp = 1;
    while (x != 1) {
      int z = x;
      int cnt = 0;
      while (z % spf[x] == 0) {
        cnt++;
        z /= spf[x];
      }
      x = z;
      temp *= (cnt + 1);
    }
    ans += temp;
  }
  cout << ans;
}
int32_t main() {
  ios_base::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    solve();
  }
}


// #pragma GCC oplmize(2)
//  #pragma GCC optimize("Ofast")
//  #pragma GCC target("avx,avx2,fma")
//  #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
#define ll long long
#define sc(x) scanf("%lld", &x)
#define scs(x) scanf("%s", x + 1)
#define pr(x) printf("%lld\\n", x)
#define prs(x) printf("%s\\n", x)
using namespace std;
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
ll n, s, a[maxn];

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  sc(n);
  for (int i = 1; i <= n; i++) {
    s = 0;
    for (int j = 1; j <= sqrt(i); j++) {
      if (i % j == 0) {
        if (i / j == j)
          s++;
        else
          s += 2;
      }
    }
    a[i] = a[i - 1] + s;
  }
  pr(a[n - 1]);
  return 0;
}

// #pragma GCC oplmize(2)
//  #pragma GCC optimize("Ofast")
//  #pragma GCC target("avx,avx2,fma")
//  #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
#define ll long long
#define sc(x) scanf("%lld", &x)
#define scs(x) scanf("%s", x + 1)
#define pr(x) printf("%lld\\n", x)
#define prs(x) printf("%s\\n", x)
using namespace std;
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
ll n, s, a[maxn];

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  sc(n);
  for (int i = 1; i * i <= n; i++) {
    for (int j = i + 1; i * j <= n; j++) {
      a[i * j] += 2;
    }
    a[i * i] += 1;
  }
  while (n--) {
    s += a[n];
  }
  pr(s);
  return 0;
}


// コンパイラ最適化用
#pragma GCC optimize("Ofast")
#define _GLIBCXX_DEBUG
// インクルード(アルファベット順)
#include <algorithm> //sort,二分探索,など
#include <bits/stdc++.h>
#include <bitset>        //固定長bit集合
#include <chrono>        //実行時間計測
#include <cmath>         //pow,logなど
#include <complex>       //複素数
#include <deque>         //両端アクセスのキュー
#include <functional>    //sortのgreater
#include <iomanip>       //setprecision(浮動小数点の出力の誤差)
#include <iostream>      //入出力
#include <iterator>      //集合演算(積集合,和集合,差集合など)
#include <map>           //map(辞書)
#include <numeric>       //iota(整数列の生成),gcdとlcm,accumulate
#include <queue>         //キュー
#include <set>           //集合
#include <stack>         //スタック
#include <string>        //文字列
#include <unordered_map> //順序保持しないmap
#include <unordered_set> //順序保持しないset
#include <utility>       //pair
#include <vector>        //可変長配列

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;
typedef pair<int, int> pii;
typedef pair<ll, ld> pld;
typedef pair<pii, int> ppiii;
typedef pair<pii, ll> ppiill;
typedef pair<pll, ll> ppllll;
typedef pair<pli, int> pplii;
typedef map<int, int> mii;
typedef deque<ll> dll;
typedef queue<ll> qll;
typedef priority_queue<ll> pqll;
typedef priority_queue<ll, vector<ll>, greater<ll>> pqrll;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef vector<vector<int>> vvint;
typedef vector<vector<pll>> vvpll;

// マクロ
// forループ
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (ll i = 0; i < ll(n); i++)
#define REPD(i, n) for (ll i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (ll i = a; i <= ll(b); i++)
#define FORD(i, a, b) for (ll i = a; i >= ll(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end()
#define SIZE(x) ll(x.size())
// 定数
#define INF 1000000000000 // 10^12:∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000       // 10^5:配列の最大のrange
// 略記
#define PB push_back // 挿入
#define MP make_pair // pairのコンストラクタ
#define F first      // pairの一つ目の要素
#define S second     // pairの二つ目の要素
#define cin(x) cin >> x
// 最大化問題最小化問題
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

ll comp(ll n) {
  if (n == 0)
    return 0;
  if (n == 1)
    return 1;
  ll s = sqrt(n);
  ll cnt = 0;
  FOR(i, 1, s) {
    if (i * i == n)
      cnt++;
    else if (n % i == 0)
      cnt += 2;
  }
  return cnt;
}

signed main() {
  // 入力の高速化用のコード
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  // 入力
  ll N = 0;
  cin >> N;

  vll S(N + 1);
  REP(i, N + 1) S[i] = comp(i);

  ll ans = 0;

  FOR(i, 1, N - 1) { ans += S[N - i]; }

  // 本文
  // 出力
  cout << ans << endl;
  // REP(i,N) cout << ans.at(i) <<endl;
  return 0;
}

// コンパイラ最適化用
#pragma GCC optimize("Ofast")
#define _GLIBCXX_DEBUG
// インクルード(アルファベット順)
#include <algorithm> //sort,二分探索,など
#include <bits/stdc++.h>
#include <bitset>        //固定長bit集合
#include <chrono>        //実行時間計測
#include <cmath>         //pow,logなど
#include <complex>       //複素数
#include <deque>         //両端アクセスのキュー
#include <functional>    //sortのgreater
#include <iomanip>       //setprecision(浮動小数点の出力の誤差)
#include <iostream>      //入出力
#include <iterator>      //集合演算(積集合,和集合,差集合など)
#include <map>           //map(辞書)
#include <numeric>       //iota(整数列の生成),gcdとlcm,accumulate
#include <queue>         //キュー
#include <set>           //集合
#include <stack>         //スタック
#include <string>        //文字列
#include <unordered_map> //順序保持しないmap
#include <unordered_set> //順序保持しないset
#include <utility>       //pair
#include <vector>        //可変長配列

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;
typedef pair<int, int> pii;
typedef pair<ll, ld> pld;
typedef pair<pii, int> ppiii;
typedef pair<pii, ll> ppiill;
typedef pair<pll, ll> ppllll;
typedef pair<pli, int> pplii;
typedef map<int, int> mii;
typedef deque<ll> dll;
typedef queue<ll> qll;
typedef priority_queue<ll> pqll;
typedef priority_queue<ll, vector<ll>, greater<ll>> pqrll;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef vector<vector<int>> vvint;
typedef vector<vector<pll>> vvpll;

// マクロ
// forループ
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (ll i = 0; i < ll(n); i++)
#define REPD(i, n) for (ll i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (ll i = a; i <= ll(b); i++)
#define FORD(i, a, b) for (ll i = a; i >= ll(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end()
#define SIZE(x) ll(x.size())
// 定数
#define INF 1000000000000 // 10^12:∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000       // 10^5:配列の最大のrange
// 略記
#define PB push_back // 挿入
#define MP make_pair // pairのコンストラクタ
#define F first      // pairの一つ目の要素
#define S second     // pairの二つ目の要素
#define cin(x) cin >> x
// 最大化問題最小化問題
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

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;
}

ll amp(ll N) {
  const auto &pf = prime_factorize(N);
  long long res = 1;
  for (auto p : pf)
    res *= p.second + 1;
  return res;
}

int main() {
  // 入力の高速化用のコード
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  // 入力
  ll N = 0;
  cin >> N;
  vll S(N + 1);
  REP(i, N + 1) S[i] = amp(i);
  ll ans = 0;

  FOR(i, 1, N - 1) { ans += S[N - i]; }

  // 本文
  // 出力
  cout << ans << endl;
  // REP(i,N) cout << ans.at(i) <<endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define int ll
#define pb push_back
#define setbits(x) __builtin_popcountll(x)
#define endl "\\n"
typedef long long ll;
int find(int n) {
  int ans = 0;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ans++;
      if (n / i != i)
        ans++;
    }
  }
  return ans;
}
void solve() {
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i <= n - 1; i++) {
    int x = n - i;
    ans += find(x);
  }
  cout << ans << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define int ll
#define pb push_back
#define setbits(x) __builtin_popcountll(x)
#define endl "\\n"
typedef long long ll;
#define mx 1000011
int dp[mx];
void solve() {

  int n;
  cin >> n;
  for (int i = 2; i < mx; i++) {
    if (!dp[i]) {
      for (int j = i; j < mx; j += i)
        dp[j] = i;
    }
  }
  int ans = 1;

  for (int i = 2; i <= n - 1; i++) {
    int x = i;
    map<int, int> mp;
    while (x != dp[x]) {
      int f = dp[x];
      mp[f] += 1;
      x /= dp[x];
    }
    mp[x] += 1;
    map<int, int>::iterator it = mp.begin();
    int res = 1;
    for (; it != mp.end(); it++) {
      int r = it->second;
      res *= (r + 1);
    }
    ans += res;
  }
  cout << ans << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
  return 0;
}


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

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

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

ll fact(ll n) {
  if (n == 0)
    return 1;
  else
    return n * fact(n - 1);
}

ll nCr(ll n, ll r) { return fact(n) / (fact(r) * fact(n - r)); }

void SieveOfEratosthenes(ll n) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));
  for (ll p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (ll i = p * p; i <= n; i += p)
        prime[i] = false;
    }
  }

  for (int p = 2; p <= n; p++)
    if (prime[p])
      cout << p << " ";
}

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

void solve() {

  ll N;
  cin >> N;
  ll i, c = 0;
  for (i = 1; i < N; i++) {
    c += countDivisors(i);
  }
  cout << c;
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  // freopen("D:\\\\codes\\\\1input.txt","r",stdin);
  // freopen("D:\\\\codes\\\\1output.txt","w",stdout);
  ll T = 1;
  // cin>>T;
  for (ll t = 1; t <= T; t++) {
    // cout<<"Case #"<<t<<": ";
    solve();
    // cout<<"\\n";
  }
}

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

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

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

ll fact(ll n) {
  if (n == 0)
    return 1;
  else
    return n * fact(n - 1);
}

const int MAX = 1000001;

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

// function to generate all prime factors
// of numbers from 1 to 10^6
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;
      }
    }
  }
}

// function to calculate number of factors
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;
}

void solve() {

  ll N;
  cin >> N;
  generatePrimeFactors();
  ll i, c = 0;
  for (i = 1; i < N; i++) {
    ll x = calculateNoOFactors(i);
    // cout<<x<<"\\n";
    c += x;
  }
  cout << c;
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  // freopen("D:\\\\codes\\\\1input.txt","r",stdin);
  // freopen("D:\\\\codes\\\\1output.txt","w",stdout);
  ll T = 1;
  // cin>>T;
  for (ll t = 1; t <= T; t++) {
    // cout<<"Case #"<<t<<": ";
    solve();
    // cout<<"\\n";
  }
}


#include <algorithm>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <string>
#include <vector>
using namespace std;
#define ll long long int
#define rep(i, n) for (int i = 0; i < n; i++)
const int INF = 1000000007;

ll return_ans(ll x);

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

  cout << ans;
  return 0;
}

ll return_ans(ll x) {
  ll count = 0;
  for (ll i = 1; i * i <= x; ++i) {
    if (x % i == 0) {
      if (x / i == i) {
        count += 1;
      } else {
        count += 2;
      }
    }
  }
  return count;
}

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <string>
#include <vector>
using namespace std;
#define ll long long int
#define rep(i, n) for (int i = 0; i < n; i++)
const int INF = 1000000007;

ll return_ans(ll x);

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

  cout << ans;
  return 0;
}

ll return_ans(ll x) {
  ll count = 1;
  for (ll i = 2; i * i <= x; ++i) {
    if (x % i != 0)
      continue;
    ll ex = 0;
    while (x % i == 0) {
      ++ex;
      x /= i;
    }
    if (ex != 0) {
      count *= (ex + 1);
    }
  }
  if (x != 1)
    count *= 2;
  return count;
}


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

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

#include <bits/stdc++.h>

using namespace std;

vector<int> divisor(int n) {
  vector<int> v;
  for (int i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        v.push_back(i);
      else {
        v.push_back(i);
        v.push_back(n / i);
      }
    }
  }
  return v;
}

int main() {
  int a, b, i, j, n, t;
  cin >> n;
  vector<int> v;
  int count = 0;
  v = divisor(n);
  for (i = 1; i <= n; i++) {
    count += n / i;
  }
  count -= v.size();
  cout << count - 2;
}


//
//  main.cpp
//  A
//
//  Created by E SAMEER KUMAR on 09/04/20.
//  Copyright © 2020 E SAMEER KUMAR. All rights reserved.

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
// map<int,vector<int>> tree;
// map<int,vector<int>> rooted;
// map<int,int> primes;
void debugi(vector<int> &vec) {
  int n = (int)vec.size();
  for (int i = 0; i < n; i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
void debugl(vector<ll> &vec) {
  int n = (int)vec.size();
  for (int i = 0; i < n; i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
void debugmap(map<int, int> &mp) {
  for (auto x : mp) {
    cout << x.first << " " << x.second << " , ";
  }
  cout << endl;
}
void debugset(set<int> &st) {
  for (auto x : st) {
    cout << x << " ";
  }
  cout << endl;
}
void debugparri(vector<pair<int, int>> &arr) {
  for (int i = 0; i < (int)arr.size(); i++) {
    cout << "[" << arr[i].first << " : " << arr[i].second << "]"
         << " ";
  }
  cout << endl;
}
void debugpi(pair<int, int> &pi) {
  cout << pi.first << " " << pi.second << endl;
}
void debugq(queue<int> q) {
  while (!q.empty()) {
    cout << q.front() << " ";
    q.pop();
  }
  cout << endl;
}

bool check(int n, int i, int j) {
  if ((0 <= i & i < n) && (0 <= j & j < n)) {
    return true;
  }
  return false;
}
// ll MOD = 1e9+7;
ll mod = 998244353;
ll powab(ll a, ll b, ll mod) {
  if (b == 0) {
    return 1;
  }
  ll z = powab(a, b / 2, mod);
  ll res = (z * z * 1LL) % mod;
  if (b & 1) {
    res = (res * 1LL * a) % mod;
  }
  return res;
}
// char s[100006];
// int m=200005;
// int p;
// int mod(int x,int mod){
//    if(x<0){
//        return mod-(x%mod);
//    }
//    else{
//        return x%mod;
//    }
//}
// ll modinv(ll a){
//    ll ans=powab(a, mod-2, mod);
//    return ans;
//}

int lim = 10;
int n;
vector<vector<pair<int, ll>>> g(lim);
vector<int> vis(lim);
vector<ll> dp(lim), a(lim);
int dia = 0, node = 0;
int ind = 0;
ll gcd(ll a, ll b) {
  if (b == 0) {
    return a;
  }
  return gcd(b, a % b);
}
void upd(int k, int x, vector<int> &tree, int n) {
  //    cout<<k<<" k "<<endl;
  if (k == 0) {
    return;
  }
  //    cout<<k<<" k "<<endl;
  while (k <= n) {
    //        cout<<k<<" kk "<<endl;
    tree[k] += x;
    k += (k & -k);
  }
}
int sum(int k, vector<int> &tree, int n) {
  int s = 0;
  while (k >= 1) {
    s += tree[k];
    k -= (k & -k);
  }
  return s;
}
int x, k;
ll get_low(int i, vector<int> &arr) {
  int low = 0, high = arr.size() - 1;
  ll ans = -1;
  while (low <= high) {
    int mid = (low + high) / 2;
    if (arr[mid] < arr[i]) {
      low = mid + 1;
      continue;
    }
    int fr = arr[mid] / x;
    int fl = arr[i] / x;
    int bet = fr - fl;
    if (arr[i] % x == 0) {
      bet += 1;
    }
    if (bet < k) {
      low = mid + 1;
    } else if (bet == k) {
      ans = mid;
      high = mid - 1;
    } else {
      high = mid - 1;
    }
  }
  return ans;
}
ll get_high(int i, vector<int> &arr) {
  int low = 0, high = arr.size() - 1;
  ll ans = -1;
  while (low <= high) {
    int mid = (low + high) / 2;
    if (arr[mid] < arr[i]) {
      low = mid + 1;
      continue;
    }
    int fr = arr[mid] / x;
    int fl = arr[i] / x;
    int bet = fr - fl;
    if (arr[i] % x == 0) {
      bet += 1;
    }
    if (bet < k) {
      low = mid + 1;
    } else if (bet == k) {
      ans = mid;
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }
  return ans;
}
void solve() {
  int n;
  cin >> n;
  int ans = 0;
  for (int i = 1; i < n; i++) {
    int m = n - i;
    // int lim=(int)sqrt(m)+2;
    for (int j = 1; j * j <= m; j++) {
      if (m % j == 0) {
        if (j != (m / j)) {
          ans += 2;
        } else {
          ans += 1;
        }
      }
    }
  }
  cout << ans << endl;
  return;
}
int main(int argc, const char *argv[]) {
  // insert code here...
  // ofstream file;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t;
  // cin >> t;
  t = 1;
  for (int tt = 0; tt < t; tt++) {
    solve();
  }
  return 0;
}

//
//  main.cpp
//  A
//
//  Created by E SAMEER KUMAR on 09/04/20.
//  Copyright © 2020 E SAMEER KUMAR. All rights reserved.

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
// map<int,vector<int>> tree;
// map<int,vector<int>> rooted;
// map<int,int> primes;
void debugi(vector<int> &vec) {
  int n = (int)vec.size();
  for (int i = 0; i < n; i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
void debugl(vector<ll> &vec) {
  int n = (int)vec.size();
  for (int i = 0; i < n; i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
void debugmap(map<int, int> &mp) {
  for (auto x : mp) {
    cout << x.first << " " << x.second << " , ";
  }
  cout << endl;
}
void debugset(set<int> &st) {
  for (auto x : st) {
    cout << x << " ";
  }
  cout << endl;
}
void debugparri(vector<pair<int, int>> &arr) {
  for (int i = 0; i < (int)arr.size(); i++) {
    cout << "[" << arr[i].first << " : " << arr[i].second << "]"
         << " ";
  }
  cout << endl;
}
void debugpi(pair<int, int> &pi) {
  cout << pi.first << " " << pi.second << endl;
}
void debugq(queue<int> q) {
  while (!q.empty()) {
    cout << q.front() << " ";
    q.pop();
  }
  cout << endl;
}

bool check(int n, int i, int j) {
  if ((0 <= i & i < n) && (0 <= j & j < n)) {
    return true;
  }
  return false;
}
// ll MOD = 1e9+7;
ll mod = 998244353;
ll powab(ll a, ll b, ll mod) {
  if (b == 0) {
    return 1;
  }
  ll z = powab(a, b / 2, mod);
  ll res = (z * z * 1LL) % mod;
  if (b & 1) {
    res = (res * 1LL * a) % mod;
  }
  return res;
}
// char s[100006];
// int m=200005;
// int p;
// int mod(int x,int mod){
//    if(x<0){
//        return mod-(x%mod);
//    }
//    else{
//        return x%mod;
//    }
//}
// ll modinv(ll a){
//    ll ans=powab(a, mod-2, mod);
//    return ans;
//}

int lim = 10;
int n;
vector<vector<pair<int, ll>>> g(lim);
vector<int> vis(lim);
vector<ll> dp(lim), a(lim);
int dia = 0, node = 0;
int ind = 0;
ll gcd(ll a, ll b) {
  if (b == 0) {
    return a;
  }
  return gcd(b, a % b);
}
void upd(int k, int x, vector<int> &tree, int n) {
  //    cout<<k<<" k "<<endl;
  if (k == 0) {
    return;
  }
  //    cout<<k<<" k "<<endl;
  while (k <= n) {
    //        cout<<k<<" kk "<<endl;
    tree[k] += x;
    k += (k & -k);
  }
}
int sum(int k, vector<int> &tree, int n) {
  int s = 0;
  while (k >= 1) {
    s += tree[k];
    k -= (k & -k);
  }
  return s;
}
int x, k;
vector<int> sieve(1000010, 0);
void fill() {
  // cout<<"sra"<<endl;
  for (int i = 2; i <= 1000004; i++) {
    // cout<<i<<endl;
    if (sieve[i] == 0) {
      sieve[i] = i;
      for (int j = i; j <= 1000004; j += i) {
        sieve[j] = i;
      }
    }
  }
  // cout<<"filled"<<endl;
}
void solve() {
  int n;
  cin >> n;
  fill();
  int ans = 0;
  // cout<<sieve[1321]<<endl;
  for (int i = 1; i < n; i++) {
    int m = n - i;
    // int lim=(int)sqrt(m)+2;
    map<int, int> mp;
    // cout<<m<<" m "<<endl;
    while (m != 1) {
      int f = sieve[m];
      // cout<<f<<" "<<m<<endl;
      mp[f] += 1;
      m /= f;
    }
    int p = 1;
    for (auto x : mp) {
      p *= (x.second + 1);
    }
    ans += p;
  }
  cout << ans << endl;
  return;
}
int main(int argc, const char *argv[]) {
  // insert code here...
  // ofstream file;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t;
  // cin >> t;
  t = 1;
  for (int tt = 0; tt < t; tt++) {
    solve();
  }
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
int n, a[50005], b[50005], ans, nn, ans1;
signed main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    nn = n - i;
    for (int j = 1; j <= sqrt(nn); j++) {
      if (nn % j == 0) {
        if (j != sqrt(nn))
          ans++;
        else
          ans1++;
      }
    }
  }
  cout << ans * 2 + ans1 << endl;
}

#include <bits/stdc++.h>
using namespace std;
int n, ans, nn, ans1;
signed main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n && (i * j) < n; j++) {
      ans++;
    }
  }
  cout << ans << endl;
}


#include <bits/stdc++.h>

#define rep2(x, fr, to) for (int x = (fr); x < (to); x++)
#define rep(x, to) for (int x = 0; x < (to); x++)
#define repr(x, fr, to) for (int x = (fr); x >= (to); x--)
#define all(c) c.begin(), c.end()
#define sz(v) (int)v.size()

using namespace std;
typedef long long ll;
typedef vector<int> VI;
typedef pair<int, int> pii;
typedef vector<ll> VL;
const int MD = 1e9 + 7;
void dbg() { cerr << "\\n"; }
template <class F, class... S> void dbg(const F &f, const S &...s) {
  cerr << f << ": ";
  dbg(s...);
}

int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;

  ll ans = 0;
  rep2(i, 1, n) {
    int su = n - i;
    for (ll j = 1; j * j <= su; j++) {
      ll sm = 0;
      if (su % j == 0) {
        if (j * j == su)
          sm++;
        else
          sm += 2;
      }
      ans += sm;
      // dbg(i, sm, ans);
    }
  }
  cout << ans << "\\n";

  return 0;
}

#include <bits/stdc++.h>

#define rep2(x, fr, to) for (int x = (fr); x < (to); x++)
#define rep(x, to) for (int x = 0; x < (to); x++)
#define repr(x, fr, to) for (int x = (fr); x >= (to); x--)
#define all(c) c.begin(), c.end()
#define sz(v) (int)v.size()

using namespace std;
typedef long long ll;
typedef vector<int> VI;
typedef pair<int, int> pii;
typedef vector<ll> VL;
const int MD = 1e9 + 7;
void dbg() { cerr << "\\n"; }
template <class F, class... S> void dbg(const F &f, const S &...s) {
  cerr << f << ": ";
  dbg(s...);
}

int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;

  VI ys(1100000);

  for (ll j = 1; j <= n; j++) {
    rep2(i, 1, n) {
      if (j * i > n)
        break;
      ys[i * j]++;
    }
  }
  ll ans = 0;
  rep2(i, 1, n) {
    int su = n - i;
    ll sm = ys[su];
    ans += sm;
  }
  cout << ans << "\\n";

  return 0;
}


#include <bits/stdc++.h>
using namespace std;
vector<long long> primeNumbers;
vector<long long> primeCounts;
long long ans = 0;
bool isPrime(long long n) {
  // cout << n << endl;
  if (n == 0)
    return false;
  if (n == 1)
    return false;
  if (n == 2)
    return true;
  double sq = sqrt(n);
  for (long long i = 2; i <= sq; i++) {
    if (n % i == 0) {
      return false;
    }
  }
  return true;
}
void getPrimeNumbers(long long n) {
  if (isPrime(n)) {
    primeNumbers.push_back(n);
  }
  if (n > 1) {
    getPrimeNumbers(n - 1);
  }

  // cout << "getPrimeNumbers" << endl;
  // cout << n << endl;
  // if(isPrime(n)){
  // primeNumbers.push_back(n);
  // return;
  //}
  // double sq = sqrt(n);
  // if(n==1){
  // return;
  //}
  // for(long long i = 2; i<=sq; i++ ){
  // if(n%i==0){
  ////cout << n << endl;
  // if(isPrime(i))primeNumbers.push_back(i);
  // getPrimeNumbers(n/i);
  // break;
  //}
  //}
}
long getFactorizeNum(long value) {
  long ans = 0;
  for (long i = 0; i < primeNumbers.size(); i++) {
    while (true) {
      if (value % primeNumbers[i] == 0) {
        value /= primeNumbers[i];
        ans++;
      } else {
        break;
      }
    }
    if (value == 1) {
      break;
    }
  }
  return ans;
}

int main() {
  long n;
  cin >> n;
  getPrimeNumbers(n);
  long a = 1, b = 1, c = 1; // every number > 0
  long long ans = 0;
  vector<long> dp(n + 1, -1);
  dp[1] = 1;
  for (long i = 0; i < primeNumbers.size(); i++) {
    // cout << primeNumbers[i] << endl;
    dp[primeNumbers[i]] = 2;
    for (long j = 2; j < n; j++) {
      long tmp = pow(primeNumbers[i], j);
      if (tmp <= n) {
        dp[tmp] = j + 1;
      } else {
        break;
      }
    }
  }
  while (c < n) {
    long tmp = n - (n - c);
    long oldAns = ans;
    if (dp[tmp] == -1) {
      // not prime number
      // ans+=getFactorizeNum(tmp)+1;
      while (a <= tmp) {
        if (tmp % a == 0) {
          if (tmp / a == a) {
            ans++;
          } else if ((tmp / a) > a) {
            ans++;
            ans++;
          } else {
            break;
          }
        }
        a++;
      }
    } else {
      ans += dp[tmp];
    }
    // cout << tmp << " : ";
    // cout << ans-oldAns << endl;
    a = 1;
    c++;
  }
  cout << ans << endl;
  return 0;
}

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

int main() {
  long n;
  cin >> n;
  long a = 1, b = 1, c = 1;
  long long ans = 0;
  while (a < n) {
    while (b < n) {
      if (a * b < n) {
        // cout << a << " : " << b << endl;
        ans++;
      } else {
        break;
      }
      b++;
    }
    a++;
    b = 1;
  }
  cout << ans << endl;
  return 0;
}


#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
/*
time:
wa:
反省:
考察:
*/
int main() {
  int n;
  cin >> n;
  long long count = 0;
  for (int c = 1; c <= n - 1; c++) {
    for (int a = 1; a <= sqrt(n - c); a++) {
      if ((n - c) % a == 0 && a != sqrt(n - c))
        count += 2;
      else if ((n - c) % a == 0 && a == sqrt(n - c))
        count++;
    }
  }

  cout << count << endl;
  return 0;
}

#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
/*
time:
wa:
反省:
考察:
*/
int main() {
  int n;
  cin >> n;
  long long count = 0;
  for (int a = 1; a <= n - 1; a++) {
    count += (n - 1) / a;
  }

  cout << count << endl;
  return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i++)
#define repl(i, l, r) for (int i = l; i < r; i++)
using ll = long long;
const int inf = 2e9 + 10;
const ll MOD = 1e9 + 7;
const ll INF = 9e18 + 10;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};

int main() {
  int n, x, m;
  cin >> n >> x >> m;
  int t = (x * x) % m;
  ll sum = 0;
  set<int> l;
  l.insert(x);
  while (l.find(t) != l.end()) {
    l.insert(t);
    t = (t * t) % m;
  }

  set<int>::iterator it;
  int ff = 0;
  for (it = l.find(t); it != l.end(); it++) {
    ff++;
    sum += *it;
  }
  ll ans = 0;
  int dd = 0;
  for (it = l.begin(); it != l.find(t); it++) {
    ans += *it;
    dd++;
  }
  int kk = n - dd;

  int si = kk / ff;
  ans += (si * sum);
  int cnt = 0;
  for (it = l.find(t); cnt < si; it++) {
    ans += *it;
    cnt++;
  }
  cout << ans << endl;

  return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < n; i++)
#define repl(i, l, r) for (int i = l; i < r; i++)
using ll = long long;
const int inf = 2e9 + 10;
const ll MOD = 1e9 + 7;
const ll INF = 9e18 + 10;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};

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


#include <iostream>
using namespace std;
int main(void) {
  // Your code here!
  int N;
  int count = 0;
  cin >> N;
  for (int c = 1; c < N; c++) {
    for (int a = 1; a < N - c + 1; a++) {
      if ((N - c) % a == 0) {
        count++;
      }
    }
  }
  cout << count << endl;
}

#include <cmath>
#include <iostream>
using namespace std;
int main(void) {
  // Your code here!
  int N;
  int count = 0;
  int a;
  cin >> N;
  for (int c = 1; c < N; c++) {
    for (a = 1; a * a < N - c; a++) {
      if ((N - c) % a == 0) {
        count += 2;
      }
    }
    if (a * a == N - c) {
      count++;
    }
  }
  cout << count << endl;
}


#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep2(i, x, n) for (int i = x; i < (n); i++)
#define ALL(c) (c).begin(), (c).end()
#define pb push_back
#define eb emplace_back
using namespace std;
const long long INF = 1LL << 60; // 仮想的な無限大の値;
using ll = long long;
using P = pair<int, int>;
#define vi vector<int>
#define vll vector<ll>
#define vs vector<string>
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 int mod = 1000000007;

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;
    }

    // その結果を push
    res.push_back({a, ex});
  }

  // 最後に残った数について
  if (N != 1)
    res.push_back({N, 1});
  return res;
}

int main() {
  int N;
  cin >> N;
  int ans = 0;
  rep2(i, 1, N) {
    int x = i;
    if (x == 1) {
      ++ans;
      continue;
    }
    // if(x <= 3){
    //     ans += 2;continue;
    // }
    ans += 2;
    for (ll a = 2; a * a <= x; ++a) {
      if (x % a != 0)
        continue;
      if (a * a == x) {
        ++ans;
        continue;
      }
      ans += 2;
    }
  }
  cout << ans << endl;
  return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep2(i, x, n) for (int i = x; i < (n); i++)
#define ALL(c) (c).begin(), (c).end()
#define pb push_back
#define eb emplace_back
using namespace std;
const long long INF = 1LL << 60; // 仮想的な無限大の値;
using ll = long long;
using P = pair<int, int>;
#define vi vector<int>
#define vll vector<ll>
#define vs vector<string>
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 int mod = 1000000007;

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;
    }

    // その結果を push
    res.push_back({a, ex});
  }

  // 最後に残った数について
  if (N != 1)
    res.push_back({N, 1});
  return res;
}

int main() {
  int N;
  cin >> N;
  int ans = 0;
  rep2(i, 1, N) {
    int a = N / i;
    int b = N % i;
    if (b != 0) {
      ans += a;
      // if(a >=i) --ans;
    } else {
      --a;
      ans += a;
      // if(a >=i) --ans;
    }
  }
  cout << ans << endl;
  return 0;
}