#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int to, next, val;
} edge[100005 << 1];
int head[100005], cnt;
void init() {
  memset(head, -1, sizeof(head));
  cnt = 0;
}
void add(int u, int v, int d) {
  edge[cnt].to = v;
  edge[cnt].next = head[u];
  edge[cnt].val = d;
  head[u] = cnt++;
}
bool isp[100005 * 10];
int prime[100005 * 10], tol;
const int M = 100005 * 10;
vector<pair<int, int> > ans;
bool check() {
  for (auto &c : ans) {
    if (c.first & 1) return false;
  }
  for (auto &c : ans) {
    c.first >>= 1;
  }
  return true;
}
int tolbits(int n, int &v) {
  int ret = 0;
  v = 0;
  while (n) {
    if (n & 1) ++v;
    n >>= 1;
    ++ret;
  }
  return ret;
}
bool isPrime(int n) {
  if (n < M) return !isp[n];
  int k = sqrt(n) + 1;
  for (int i = 2; i <= k; ++i) {
    if (n % i == 0) return false;
  }
  return true;
}
bool vis[100005 * 10];
int main() {
  for (int i = 2; i < M; ++i) {
    if (!isp[i]) prime[tol++] = i;
    for (int j = 0; j < tol and prime[j] * i < M; ++j) {
      isp[prime[j] * i] = true;
      if (i % prime[j] == 0) break;
    }
  }
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  long long res = 0;
  for (int i = 0; i < tol and prime[i] < n; ++i) {
    for (int j = 1; j * prime[i] <= n; ++j) {
      int k = n / (prime[i] * j);
      if (k >= 2 and !vis[prime[i] * j]) {
        res += 2ll * (k + 2) * (k - 1);
        vis[prime[i] * j] = true;
      }
    }
  }
  cout << res << "\n";
}
