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

typedef long long ll;
typedef double ld;

#define FOR(i, a, b, s) for(int i = (a); (s)>0?i<(b):i>(b); i+=(s))
#define F_OR(i, a, b, s) for(int i = (a); (s)>0?i<=(b):i>=(b); i+=(s))
#define EACH(x, a) for(auto& x: a)

#define vt vector
#define pb push_back
#define rev reverse
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

#define getchar_unlocked getchar
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define inputtxt freopen("input.txt", "r", stdin);
#define outputtxt freopen("output.txt", "w", stdout);
#define sf scanf
#define pf printf
#define endl '\n'

#define inf32 2000000000
#define inf64 2000000000000000000
#define mod17 1000000007
#define mod93 998244353
#define mx 1000000
#define eps 1e-9

template <typename T> T max(T& x, T& y){
    return x<y?y:x;
}

template <typename T> T min(T& x, T& y){
    return x>y?y:x;
}

/*
ll modexp(ll b, ll e, ll m){
    ll r = 1;
    while(e > 0){
        if(e & 1) r = (r*b)%m;
        b = (b*b)%m;
        e >>= 1;
    }
}
*/

/*
void GetStr(char* res){
    char c;
    for(;;){
        c=getchar_unlocked();
        if(c==' ' || c=='\n') continue;
        else break;
    }
    *res=c; res++;
    for(;;){
        c=getchar_unlocked();
        if (c==' ' || c=='\n' || c==EOF) break;
        *res=c; res++;
    }
    *res='\0';
}
*/

/*
void Getll(ll &val){
    char ch;bool bo=0;val=0;
    for (ch=getchar_unlocked();ch<'0'||ch>'9';ch=getchar_unlocked())if (ch=='-')bo=1;
    for (;ch>='0'&&ch<='9';val=(val<<1)+(val<<3)+ch-48,ch=getchar_unlocked());
    if (bo)val=-val;
}
*/

void Getint(int &val){
    char ch;bool bo=0;val=0;
    for (ch=getchar_unlocked();ch<'0'||ch>'9';ch=getchar_unlocked())if (ch=='-')bo=1;
    for (;ch>='0'&&ch<='9';val=(val<<1)+(val<<3)+ch-48,ch=getchar_unlocked());
    if (bo)val=-val;
}

int k;
ll ans, tambah;

int main(){
    Getint(k);
    int b1 = cbrt(k);
    F_OR(i,1,b1,1){
        int b2 = sqrt(k/i);
        F_OR(j,i,b2,1){
            if(i == j) tambah = 1;
            else tambah = 3;
            int b3 = k/(i*j);
            if(b3 < j) break;
            tambah = tambah + (b3-j)*(tambah == 1?3:6);
            ans += tambah;
            //printf("%d %d: %lld\n", i, j, tambah);
        }
    }
    printf("%lld\n",ans);
    return 0;
}

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>

using namespace __gnu_pbds;
using namespace std;

using ll = long long;
using ld = long double;

typedef tree<
        int,
        null_type,
        less<int>,
        rb_tree_tag,
        tree_order_statistics_node_update>
        ordered_set;

#define mp make_pair


const int p =  1e9 + 7;

int mul(int a, int b) {
    return (1LL * a * b) % p;
}

int add(int a, int b) {
    int s = (a+b);
    if (s>=p) s-=p;
    return s;
}

int sub(int a, int b) {
    int s = (a+p-b);
    if (s>=p) s-=p;
    return s;
}

int po(int a, ll deg)
{
    if (deg==0) return 1;
    if (deg%2==1) return mul(a, po(a, deg-1));
    int t = po(a, deg/2);
    return mul(t, t);
}

int inv(int n)
{
    return po(n, p-2);
}


mt19937 rnd(time(0));

/*
const int N = 1e6 + 5;

vector<int> facs(N), invfacs(N);

void init()
{
    facs[0] = 1;
    for (int i = 1; i<N; i++) facs[i] = mul(facs[i-1], i);
    invfacs[N-1] = inv(facs[N-1]);
    for (int i = N-2; i>=0; i--) invfacs[i] = mul(invfacs[i+1], i+1);
}

int C(int n, int k)
{
    if (n<k) return 0;
    if (n<0 || k<0) return 0;
    return mul(facs[n], mul(invfacs[k], invfacs[n-k]));
}*/


/*struct DSU
{
    vector<int> sz;
    vector<int> parent;
    vector<int> value;
    void make_set(int v) {
        parent[v] = v;
        sz[v] = 1;
        value[v] = 0;
    }

    int find_set(int v) {
        if (v == parent[v])
            return v;
        else
        {
            auto par = find_set(parent[v]);
            value[v]^=value[parent[v]];
            parent[v] = par;
            return par;
        }
    }

    void union_sets(int a, int b, int w) {
        find_set(a);
        find_set(b);

        w^=value[a]; w^=value[b];
        a = find_set(a);
        b = find_set(b);

        if (a != b) {
            if (sz[a] < sz[b])
                swap(a, b);
            parent[b] = a;
            value[b] = w;
            sz[a] += sz[b];
        }
    }

    int val(int v)
    {
        find_set(v); return value[v];
    }

    DSU (int n)
    {
        parent.resize(n);
        sz.resize(n);
        value.resize(n);
        for (int i = 0; i<n; i++) make_set(i);
    }
};*/


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

    int k; cin>>k;
    int ans = 0;
    for (int a = 1; a<=k; a++)
        for (int b = 1; a*b<=k; b++)
            for (int c = 1; a*b*c<=k; c++) ans++;

    cout<<ans;

}

