using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace debug
{
class main
{
static void Main(string args)
{
//問題クラスを展開
ProgramD a = new ProgramD();
a.main();//実行する
}
}
//ABC170
class ProgramA
{
public void main()
{
//入力
int a = int.Parse(Console.ReadLine());
//a+a*a+a*a*aで答えを出す
Console.WriteLine(a + a*a + a*a*a);
}
}
class ProgramB
{
public void main()
{
//入力
string s = Console.ReadLine();
string t = Console.ReadLine();
int count = 0;
//頭から文字を見て一致しないところを足す
for (int i = 0; i < s.Length; i++)
{
if (s[i] != t[i])
count++;
}
//答え出力
Console.WriteLine(count);
}
}
class ProgramC
{
public void main()
{
//入力
string s = Console.ReadLine().Split(' ');
long n = long.Parse(s[0]);
long m = long.Parse(s[1]);
long k = long.Parse(s[2]);
long one = new long[n + 1];
long two = new long[m + 1];
string s1 = Console.ReadLine().Split(' ');
string s2 = Console.ReadLine().Split(' ');
//頭からi冊目を読んでかかる時間に変換
for (int i = 0; i < n; i++)
{
if (i == 0)
one[i + 1] = long.Parse(s1[i]);
else
one[i + 1] = one[i] + long.Parse(s1[i]);
}
//頭からi冊目を読んでかかる時間に変換
for (int i = 0; i < m; i++)
{
if (i == 0)
two[i + 1] = long.Parse(s2[i]);
else
two[i + 1] = two[i] + long.Parse(s2[i]);
}
long ans = 0;
//N冊あるタワーで読む冊数を決めたとき、M冊あるタワーで何冊読むか二分探索で決める
for(int i = 0;i <= n;i++)
{
long time = k - one[i];//M冊タワーの読める時間を設定
//すでにマイナスならあり得ないので飛ばす
if (time < 0)
continue;
long min = -1;
long max = m + 1;
//二分探索
while (min + 1 != max)
{
long t = (min + max) / 2;
if (two[t] <= time)
min = t;
else
max = t;
}
//最大を更新
ans = Math.Max(i + min, ans);
}
//答え出力
Console.WriteLine(ans);
}
}
class ProgramD
{
public void main()
{
//入力
long n = long.Parse(Console.ReadLine());
long ans = 0;
//iからNを超えないiの倍数の公差iの公差数列の和を求めて、足す。
for (int i = 1; i <= n; i++)
{
long count = n / i;
ans += (i + count * i) * count / 2;
}
//答え出力
Console.WriteLine(ans);
}
}
}