#include <bits/stdc++.h>
using namespace std;
bool SR(int &x) { return scanf("%d", &x) == 1; }
bool SR(long long &x) { return scanf("%lld", &x) == 1; }
bool SR(double &x) { return scanf("%lf", &x) == 1; }
bool SR(char *s) { return scanf("%s", s) == 1; }
bool RI() { return true; }
template <typename I, typename... T>
bool RI(I &x, T &...tail) {
  return SR(x) && RI(tail...);
}
void SP(const int x) { printf("%d", x); }
void SP(const long long x) { printf("%lld", x); }
void SP(const double x) { printf("%.16lf", x); }
void SP(const char *s) { printf("%s", s); }
void PL() { puts(""); }
template <typename I, typename... T>
void PL(const I x, const T... tail) {
  SP(x);
  if (sizeof...(tail)) putchar(' ');
  PL(tail...);
}
const int MOD = 1e9 + 7;
long long n, m;
void read() { RI(n, m); }
void build() {}
int mul() { return 1; }
template <typename I, typename... T>
int mul(const I &x, const T &...tail) {
  return x % MOD * mul(tail...) % MOD;
}
void sol() {
  const long long nmod = n % MOD;
  const int I2 = MOD / 2 + 1;
  long long ans = 0, mi = min(n, m);
  for (long long i = 1, j; i <= mi; i = j + 1) {
    j = min(n / (n / i), m);
    ans += mul(j - i + 1, nmod);
    ans -= mul(n / i, i + j, j - i + 1, I2);
    ans %= MOD;
  }
  if (n < m) {
    ans += mul(m - n, nmod);
    ans %= MOD;
  }
  ans += MOD;
  ans %= MOD;
  PL(ans);
}
int main() {
  read();
  build();
  sol();
  return 0;
}
