1 #include
2 #include
3 #include
4 using namespace std;
5
6 #define ll __int64
7 const ll MOD=1e9+7;
8
9 int main()
10 {
11 ll n,m;
12 scanf("%I64d%I64d",&n,&m);
13 ll ans=(n%MOD)*(m%MOD)%MOD;
14 ll temp=0,las=m+1;//记录哪些数没被减
15 m=min(n,m);//n 余大于 n 的都等于 n
16 ll nn=(ll)sqrt(n*1.0);
17 for (ll i=1;i<=nn;i++)
18 {
19 ll l = n/(i+1)+1;
20 ll r = n/i;
21
22 r=min(r,m);//可能 r 比 m 大
23 if (l>r) continue;
24
25 las=min(las,l);
26
27 ll s1=l+r , s2 =(r-l+1);//这里高斯求和有个坑,要先判断哪个数可以除2,再乘
28 if (s1%2==0) s1/=2; //直接用公式也不对,会超出ll限制
29 else s2/=2;
30 s1%=MOD;s2%=MOD;
31 s1=(s1*s2)%MOD;
32 s1=s1*i%MOD;
33 temp=(temp+s1)%MOD;
34 }
35 ans=(ans+MOD-temp)%MOD;
36 for (ll i=1;i//剩下的没被减得数,将n余之为0的最大整数减去
37 {
38 temp=n/i%MOD*i%MOD;
39 ans=(ans+MOD-temp)%MOD;
40 }
41 printf("%I64d\n",ans);
42
43 return 0;
44 }