#include
#include
#include
#define N 1000000007
typedef long long ll;
using namespace std;
ll sum;
int main()
{
ll n,i,st,ed,cnt;
while(scanf("%I64d",&n)!=EOF){
if(n<=0) break;
sum=0;ed=n+1;
for(i=1;i<=sqrt(n);i++){
if(n/i>sqrt(n)){ //大于 SQRT(N)的数列比较长,求起来方便不会出错
st=n/(i+1)+1; //等差数列的起点
cnt=ed-st; //数列中的元素个数
// printf("st==%I64d ed==%I64d cnt == %I64d
",st,ed,cnt);
sum+=cnt*(n%st+n%(ed-1))/2; //等差数列求和
ed=st; //更新等差数列的末端
}
sum+=n%i; //无规律的前面几项的和
}
printf("%I64d
",sum%N);
}
return 0;
}