'''ika tako

選ぶ個数を固定して、それ毎に結果を足し合わせればよい。

k  個の数を選ぶとき、各項に含まれる  10^100  は除いて考えても

和の個数を求める上では問題ない。

最小値は小さい方から  k  個を足し合わせた数0+1+2+…+(k-1)

初項  0 、末項  k−1 、長さ  k  の等差数列の総和なので  

k(k−1)/2 

最大値は大きい方から  k  個を足し合わせた数(N-k+1)+…+(N-1)+N

初項  N−k+1 、末項N 、長さk  の等差数列の総和なので  

k(2N−k+1)/2 

数字は1刻みで、特に選び方に制約も無いので、最小値～最大値の間の整数は全て作れる。

'''

# 累積和解法

from itertools import accumulate

 

n, k = list(map(int, input().split()))

MOD = 10 ** 9 + 7

f_acc = [0] + list(accumulate(list(range(n + 1))))

b_acc = [0] + list(accumulate(reversed(list(range(n + 1)))))

ans = 0

for i in range(k, n + 2):

    min_ = f_acc[i]

    max_ = b_acc[i]

    ans = (ans + max_ - min_ + 1) % MOD

print(ans)
N, K = list(map(int,input().split()))

ans = 0

MOD = 10**9 + 7

for i in range(K,N+2):

    x = (N+1-i) * i + 1

    ans += x

    ans %= MOD

print (ans)
"""ika tako
選ぶ個数を固定して、それ毎に結果を足し合わせればよい。
k  個の数を選ぶとき、各項に含まれる  10^100  は除いて考えても
和の個数を求める上では問題ない。
最小値は小さい方から  k  個を足し合わせた数0+1+2+…+(k-1)
初項  0 、末項  k−1 、長さ  k  の等差数列の総和なので  
k(k−1)/2 
最大値は大きい方から  k  個を足し合わせた数(N-k+1)+…+(N-1)+N
初項  N−k+1 、末項N 、長さk  の等差数列の総和なので  
k(2N−k+1)/2 
数字は1刻みで、特に選び方に制約も無いので、最小値～最大値の間の整数は全て作れる。
"""
# 累積和解法
from itertools import accumulate

n, k = list(map(int, input().split()))
MOD = 10**9 + 7
f_acc = [0] + list(accumulate(list(range(n + 1))))
b_acc = [0] + list(accumulate(reversed(list(range(n + 1)))))
ans = 0
for i in range(k, n + 2):
    min_ = f_acc[i]
    max_ = b_acc[i]
    ans = (ans + max_ - min_ + 1) % MOD
print(ans)

N, K = list(map(int, input().split()))
ans = 0
MOD = 10**9 + 7
for i in range(K, N + 2):
    x = (N + 1 - i) * i + 1
    ans += x
    ans %= MOD
print(ans)

-"""ika tako -選ぶ個数を固定して、それ毎に結果を足し合わせればよい。 -k  個の数を選ぶとき、各項に含まれる  10^100  は除いて考えても -和の個数を求める上では問題ない。 -最小値は小さい方から  k  個を足し合わせた数0+1+2+…+(k-1) -初項  0 、末項  k−1 、長さ  k  の等差数列の総和なので -k(k−1)/2 -最大値は大きい方から  k  個を足し合わせた数(N-k+1)+…+(N-1)+N -初項  N−k+1 、末項N 、長さk  の等差数列の総和なので -k(2N−k+1)/2 -数字は1刻みで、特に選び方に制約も無いので、最小値～最大値の間の整数は全て作れる。 -""" -# 累積和解法 -from itertools import accumulate - -n, k = list(map(int, input().split())) +N, K = list(map(int, input().split())) +ans = 0 -f_acc = [0] + list(accumulate(list(range(n + 1)))) -b_acc = [0] + list(accumulate(reversed(list(range(n + 1))))) -ans = 0 -for i in range(k, n + 2): -    min_ = f_acc[i] -    max_ = b_acc[i] -    ans = (ans + max_ - min_ + 1) % MOD +for i in range(K, N + 2): +    x = (N + 1 - i) * i + 1 +    ans += x +    ans %= MOD