package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
const INV2 int64 = 500000004
func sumRangeMod(l, r uint64) int64 {
a := int64((l + r) % uint64(MOD))
b := int64((r - l + 1) % uint64(MOD))
return ((a * b) % MOD) * INV2 % MOD
}
func min(a, b uint64) uint64 {
if a < b {
return a
}
return b
}
func main() {
in := bufio.NewReader(os.Stdin)
var n, m uint64
fmt.Fscan(in, &n, &m)
k := min(n, m)
ans := (int64(m%uint64(MOD)) * int64(n%uint64(MOD))) % MOD
var sub int64 = 0
for i := uint64(1); i <= k; {
q := n / i
r := n / q
if r > k {
r = k
}
sumI := sumRangeMod(i, r)
term := (int64(q%uint64(MOD)) * sumI) % MOD
sub += term
if sub >= MOD {
sub -= MOD
}
i = r + 1
}
ans -= sub
if ans < 0 {
ans += MOD
}
fmt.Println(ans)
}