#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(const T& x) {
  return x * x;
}
template <class T>
inline void updMin(T& a, const T& b) {
  if (b < a) a = b;
}
template <class T>
inline void updMax(T& a, const T& b) {
  if (b > a) a = b;
}
long long a, b;
const long long M = 1000000007;
int main() {
  cin >> a >> b;
  long long sum = 0;
  for (int i = 1; i <= a; i++) {
    sum += i;
    if (sum >= M) sum -= M;
  }
  long long res = 0;
  for (int z = 1; z < b; z++) {
    res += a * z;
    res += ((z * b) % M) * sum;
    res %= M;
  }
  cout << res << endl;
  return 0;
}
