/* Author:bhagatsunny96
         JGEC
       template*/
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define ll long long int 
#define ld long double
#define fi first
#define se second
#define mod 1000000007
#define test long long int t; cin>>t; while(t-->0)
#define fIO ios_base::sync_with_stdio(false); cin.tie(NULL);
#define loop(n) for(long long int i=0;i<n;i++)
#define loopr(n) for(long long int i=n-1;i>=0;i--)
#define lrp(a,b) for(long long int i=a;i<=b;i++)
#define lrn(a,b) for(long long int i=b;i>=a;i--)
#define endl '\n'
#define ivec vector<ll>
#define ivecp vector<pair<ll,ll>>
#define imap map<ll,ll>
#define uimap unordered_map<ll,ll>
#define iset set<ll>
#define cvec vector<char>
#define civecp vector<pair<char,ll>>
#define cimap map<char,ll>
#define ucimap unordered_map<char,ll>
#define cset set<char>
#define rr return 0
using namespace std;
//Declaration
const ll N=1e7+5;
vector<ll>adj[N];
bool visited[N]={false};
ll parent[N];
ll rnk[N];
ll degree[N];
vector<ll>ax;



//Function call
bool isPrime(ll n);
bool isPalin(ll num);
ll lcm(ll a, ll b); 
ll power(ll x,ll y);
ll sumofdigits(ll n);
bool sortinrev(const pair<ll,ll>&a,const pair<ll,ll>&b);
bool sortbysec(const pair<string,ll> &a, const pair<string,ll> &b);
void make(ll a);
ll find(ll a);
void Union(ll a,ll b);
bool isSubSequence(string& str1, string& str2, ll m, ll n);
void luck(ll n);
bool isSubstring(string s1, string s2);
vector<ll>lucky;
void findDivisors(ll n);
ll n;
ll pr[N];



//solve
void solve()
{
    cin>>n;
    findDivisors(n);
    ll ans=0;
    for(ll i=1;i<=n;i++)
    {
        ans+=(i*pr[i]);
    }
    cout<<ans<<endl;
}





//--------------------------------------------------------------------------------------------------//
//Functions
void findDivisors(ll n) 
{ 
  
    // Array to store the count 
    // of divisors 
    ll divi[n+1];
    memset(divi, 0, sizeof divi); 
    // For every number from 1 to n 
    for (ll i = 1; i <= n; i++) { 
  
        // Increase divisors count for 
        // every number divisible by i 
        for (ll j = 1; j * i <= n; j++) 
            divi[i * j]++; 
    }
    for(ll i=1;i<=n;i++)
    pr[i]=divi[i];
}
bool isSubstring(string s1, string s2) 
{ 
    ll M = s1.length(); 
    ll N = s2.length(); 
  
    /* A loop to slide pat[] one by one */
    for (ll i = 0; i <= N - M; i++) { 
        ll j; 
  
        /* For current index i, check for pattern match */
        for (j = 0; j < M; j++) 
            if (s2[i + j] != s1[j]) 
                break; 
  
        if (j == M) 
            return true; 
    } 
  
    return false; 
}
void luck(ll n)
{
    lucky.pb(n);
    if(n>1e9)
    return;
    luck(n*10+4);
    luck(n*10+7);
}
bool isSubSequence(string& str1, string& str2, ll m, ll n) 
{ 
    if (m == 0) return true; 
    if (n == 0) return false; 
  
    if (str1[m-1] == str2[n-1]) 
        return isSubSequence(str1, str2, m-1, n-1); 
    return isSubSequence(str1, str2, m, n-1); 
}
ll lcm(ll a, ll b)  
{  
    return (a*b)/__gcd(a, b);  
}
ll power(ll x, ll y) 
{ 
    ll temp; 
    if( y == 0) 
        return 1; 
    temp = power(x, y/2); 
    if (y%2 == 0) 
        return temp*temp; 
    else
        return x*temp*temp; 
}
bool isPrime(ll num)
{
    bool flag=true;
    for(ll i =2;i<=num/2;i++) 
    {
       if(num%i==0) 
       {
          flag=false;
          break;
       }
    }
    return flag;
}
bool isPalin(ll num)
{
    bool flag=false;
    ll digit,rev=0,n=num;
    do
     {
         digit = num % 10;
         rev = (rev * 10) + digit;
         num = num / 10;
     } while (num != 0);
     if(rev==n)
     flag=true;
     return flag;
}
ll sumofdigits(ll n)
{
    ll c=0;
    while(n>0)
    {
        c+=(n%10);
        n/=10;
    }
    return c;
}
bool sortinrev(const pair<ll,ll>&a,const pair<ll,ll>&b) 
{ 
    return (a.first > b.first); 
}
bool sortbysec(const pair<string,ll> &a, const pair<string,ll> &b) 
{ 
    return (a.second < b.second); 
}
//DSU//
void make(ll a)
{
    parent[a]=a;
    rnk[a]=1;
}
ll find(ll a)
{
    if(parent[a]==a)
    return a;
    return parent[a]=find(parent[a]);
}
void Union(ll a,ll b)
{
    a=find(a);
    b=find(b);
    if(a==b)
    return;
    if(rnk[a]>rnk[b])
    {
        parent[b]=a;
        rnk[a]+=rnk[b];
    }
    else
    {
        parent[a]=b;
        rnk[b]+=rnk[a];
    }
}




//Driver Code
int main() 
{
    //#ifndef ONLINE_JUDGE
    //freopen("Input.txt", "r", stdin);
    //freopen("Output.txt", "w", stdout);
//#endif
    fIO
    solve();
    rr;
}

Measured memory_bytes: 394160