/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 4e3+20;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1000000007, inf = 1e9;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
ll mul(ll a, ll b) {
return ((a % MOD) * (b % MOD)) % MOD;
}
void solve() {
ll n, k; cin >> n >> k;
n += 2, k += 1;
ll pairs = n * (n-1)/2;
cout << mul(pairs, k) << "\n";
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int tt = 1; cin >> tt;
while (tt--) {
solve();
//cout << "Case #" << c++ << ": ";
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiAqLwoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmluKGEsIG4pIGZvcihpbnQgaSA9IGE7IGkgPCBuOyBpKyspCiNkZWZpbmUgZmpuKGEsIG4pIGZvcihpbnQgaiA9IGE7IGogPCBuOyBqKyspCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgYWxscihhKSBhLnJiZWdpbigpLGEucmVuZCgpCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cikKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xKTsKY29uc3QgaW50IE4gPSA0ZTMrMjA7CmNvbnN0IGxsIG9vID0gMHgzZjNmM2YzZjNmM2YzZjNmOwpjb25zdCBpbnQgTU9EID0gMTAwMDAwMDAwNywgaW5mID0gMWU5OwoKc3RyaW5nIGRpW10gPSB7IkQiLCJMIiwgIlUiLCAiUiIsICJVTCIsICJVUiIsICJETCIsICJEUiJ9OwppbnQgZHhbXSA9IHsrMSwgKzAsICswLCAtMSwgLTEsIC0xLCArMSwgKzF9OwppbnQgZHlbXSA9IHsrMCwgLTEsICsxLCArMCwgLTEsICsxLCAtMSwgKzF9OwpjaGFyIGRjW10gPSB7J0QnLCAnTCcsICdSJywgJ1UnfTsKCmxsIG11bChsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhICUgTU9EKSAqIChiICUgTU9EKSkgJSBNT0Q7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBsbCBuLCBrOyBjaW4gPj4gbiA+PiBrOwogICAgbiArPSAyLCBrICs9IDE7CiAgICBsbCBwYWlycyA9IG4gKiAobi0xKS8yOwogICAgY291dCA8PCBtdWwocGFpcnMsIGspIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogICAgRkFTVDsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdHQgPSAxOyBjaW4gPj4gdHQ7CiAgICB3aGlsZSAodHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICAgICAgLy9jb3V0IDw8ICJDYXNlICMiIDw8IGMrKyA8PCAiOiAiOwogICAgfQogICAgcmV0dXJuIDA7Cn0=