#include <bits/stdc++.h>

#pragma region Macro
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define FOR(i, m, n) for(int i = m;i < n;i++)
#define SORT(v) sort(v.begin(), v.end())
#define pb(a) push_back(a)
#define eb(a) emplace_back(a)
#define vi vector<int>
#define vvi vector<vector<int>>
#define chmax(x,y) (x = max(x,y))
#define chmin(x,y) (x = min(x,y))

using namespace std;
typedef long long ll;
typedef pair<int, int> P;
#pragma endregion

#define MOD 1000000007

#pragma region Debug
void debug_out() { cout << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
	cout << H << " ";
	debug_out(T...);
}

#ifdef _DEBUG
#define debug(...) debug_out(__VA_ARGS__)
#else
#define debug(...)
#endif
#pragma endregion

// コンパイル時、エイリアス「debug」を使用 --> マクロが使えるように

void solve(){
	#define int ll
	// ここに処理を記述
	// コンパイル時はエイリアス「gpp」--> c++17でコンパイル
	ll N, K;
	cin >> N >> K;

	// 累積和
	vector<ll> sum(N+1,0);
	rep(i,N){
		sum[i+1] += sum[i] + (i+1);
		sum[i+1] = sum[i+1] % MOD;
	}

	ll ans = 0;
	FOR(i,K,N+1){
		ll min = sum[i-1];
		min = min % MOD;
		ll max = sum[N] - sum[N-i];
		max = max % MOD;
		// debug(min, max);
		ll plus = max - min + 1;
		if(plus < 0) plus += MOD;
		ans += plus;
		ans = ans % MOD;
	}
	// 全部選んだ時
	ans += 1;

	cout << ans << endl;

}

signed main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	cout << fixed << setprecision(15);
	
	solve();
	return 0;
}