unittest
{
	assert( [ "10" ].solve == 170 );		// 追加ケース
	
	assert( [ "4" ].solve == 23 );
	assert( [ "100" ].solve == 26879 );
	assert( [ "10000000" ].solve == 838627288460105 );
}



import std.conv;
import std.range;
import std.stdio;

void main()
{
	stdin.byLineCopy.solve.writeln;
}

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	
	// 約数dごとに割り切れる数の個数を集計
	auto ans = 0L;
	foreach( d; 1L .. n + 1 )
	{
		auto c = n / d;							// dで割り切れる数はc個
		ans += ( c * ( c + 1 ) / 2 ) * d;		// d刻みでc個の合計
	}
	return ans;
}
