// Slower C++ solution:
#include <bits/stdc++.h>

#define rep(i,n) for(int i=0; i<n; i++)

#define PI 3.14159265359

#define INF 1000100100

#define MOD 1000000007

#define all(x) (x).begin(),(x).end()

typedef long long ll;

#define P pair<ll, ll>

using namespace std;



// auto mod int

// https://youtu.be/L8grWxBlIZ4?t=9858

// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize

// https://youtu.be/8uowVvQ_-Mo?t=1329 : division



const int mod = 1000000007;

struct mint {

  ll x; // typedef long long ll;

  mint(ll x=0):x((x%mod+mod)%mod){}

  mint& operator+=(const mint a) {

    if ((x += a.x) >= mod) x -= mod;

    return *this;

  }

  mint& operator-=(const mint a) {

    if ((x += mod-a.x) >= mod) x -= mod;

    return *this;

  }

  mint& operator*=(const mint a) {

    (x *= a.x) %= mod;

    return *this;

  }

  mint operator+(const mint a) const {

    mint res(*this);

    return res+=a;

  }

  mint operator-(const mint a) const {

    mint res(*this);

    return res-=a;

  }

  mint operator*(const mint a) const {

    mint res(*this);

    return res*=a;

  }

  mint pow(ll t) const {

    if (!t) return 1;

    mint a = pow(t>>1);

    a *= a;

    if (t&1) a *= *this;

    return a;

  }



  // for prime mod

  mint inv() const {

    return pow(mod-2);

  }

  mint& operator/=(const mint a) {

    return (*this) *= a.inv();

  }

  mint operator/(const mint a) const {

    mint res(*this);

    return res/=a;

  }

};

// 出力は.xで！！！！



int main(){

  int n,k; cin >> n >> k;

  mint ans=0;

  for(int i=n+1; i>=k; i--){

    ans+=(mint)((mint)(n+n-i+1)*i/2)-(mint)((mint)(0+i-1)*i/2)+1;

  }

  cout << ans.x << endl;

return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.4790629045306312x):
#include <bits/stdc++.h>

#define rep(i,n) for(int i=0; i<n; i++)

#define PI 3.14159265359

#define INF 1000100100

#define MOD 1000000007

#define all(x) (x).begin(),(x).end()

typedef long long ll;

#define P pair<ll, ll>

using namespace std;



// auto mod int

// https://youtu.be/L8grWxBlIZ4?t=9858

// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize

// https://youtu.be/8uowVvQ_-Mo?t=1329 : division



const int mod = 1000000007;

struct mint {

  ll x; // typedef long long ll;

  mint(ll x=0):x((x%mod+mod)%mod){}

  mint& operator+=(const mint a) {

    if ((x += a.x) >= mod) x -= mod;

    return *this;

  }

  mint& operator-=(const mint a) {

    if ((x += mod-a.x) >= mod) x -= mod;

    return *this;

  }

  mint& operator*=(const mint a) {

    (x *= a.x) %= mod;

    return *this;

  }

  mint operator+(const mint a) const {

    mint res(*this);

    return res+=a;

  }

  mint operator-(const mint a) const {

    mint res(*this);

    return res-=a;

  }

  mint operator*(const mint a) const {

    mint res(*this);

    return res*=a;

  }

  mint pow(ll t) const {

    if (!t) return 1;

    mint a = pow(t>>1);

    a *= a;

    if (t&1) a *= *this;

    return a;

  }



  // for prime mod

  mint inv() const {

    return pow(mod-2);

  }

  mint& operator/=(const mint a) {

    return (*this) *= a.inv();

  }

  mint operator/(const mint a) const {

    mint res(*this);

    return res/=a;

  }

};

// 出力は.xで！！！！



int main(){

  int n,k; cin >> n >> k;

  mint ans=0;

  vector<mint> sums(n+2);

  sums[0]=sums[1]=0;

  rep(i,n) sums[i+2]=sums[i+1]+i+1;

  for(int i=n+1; i>=k; i--) ans+=sums[n+1]-sums[n+1-i]-sums[i]+1;

  cout << ans.x << endl;

return 0;

}