// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;



// #define int long long

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

#define reps(i, n) for (long long i = (long long)(1); i <= (long long)(n); ++i)

#define rrep(i, n) for (long long i = ((long long)(n)-1); i >= 0; i--)

#define rreps(i, n) for (long long i = ((long long)(n)); i > 0; i--)

#define irep(i, m, n) for (long long i = (long long)(m); i < (long long)(n); ++i)

#define ireps(i, m, n) for (long long i = (long long)(m); i <= (long long)(n); ++i)

#define SORT(v, n) sort(v, v + n);

#define REVERSE(v, n) reverse(v, v+n);

#define vsort(v) sort(v.begin(), v.end());

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

#define mp(n, m) make_pair(n, m);

#define cout(d) cout<<d<<endl;

#define coutd(d) cout<<std::setprecision(10)<<d<<endl;

#define cinline(n) getline(cin,n);

#define replace_all(s, b, a) replace(s.begin(),s.end(), b, a);

#define PI (acos(-1))

#define FILL(v, n, x) fill(v, v + n, x);

#define sz(x) long long(x.size())



using ll = long long;

using vi = vector<int>;

using vvi = vector<vi>;

using vll = vector<ll>;

using vvll = vector<vll>;

using pii = pair<int, int>;

using pll = pair<ll, ll>;

using vs = vector<string>;

using vpll = vector<pair<ll, ll>>;

using vtp = vector<tuple<ll,ll,ll>>;

using vb = vector<bool>;



template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }

template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }



const ll INF = 1e15;

const ll MOD = 1e9+7;

const ll LINF = 1e18;







signed main()

{

  cin.tie( 0 ); ios::sync_with_stdio( false );

  ll n,k; cin>>n>>k;

  ll mod=1;

  rep(i,100){

    mod=(mod*10)%MOD;

  }

  set<ll> s;

  rep(i,n+1){

    s.insert((mod+i)%MOD);

  }

  ll m=s.size();

  

  ll ans=0;

  ireps(i,k,n+1){

    ll min=(i-1)*i/2;

    ll max=(n+1)*n/2-(n-i+1)*(n-i)/2;

    ans=(ans+max-min+1)%MOD;

  }

  cout<<ans<<endl;

}

// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;



// #define int long long

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

#define reps(i, n) for (long long i = (long long)(1); i <= (long long)(n); ++i)

#define rrep(i, n) for (long long i = ((long long)(n)-1); i >= 0; i--)

#define rreps(i, n) for (long long i = ((long long)(n)); i > 0; i--)

#define irep(i, m, n) for (long long i = (long long)(m); i < (long long)(n); ++i)

#define ireps(i, m, n) for (long long i = (long long)(m); i <= (long long)(n); ++i)

#define SORT(v, n) sort(v, v + n);

#define REVERSE(v, n) reverse(v, v+n);

#define vsort(v) sort(v.begin(), v.end());

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

#define mp(n, m) make_pair(n, m);

#define cout(d) cout<<d<<endl;

#define coutd(d) cout<<std::setprecision(10)<<d<<endl;

#define cinline(n) getline(cin,n);

#define replace_all(s, b, a) replace(s.begin(),s.end(), b, a);

#define PI (acos(-1))

#define FILL(v, n, x) fill(v, v + n, x);

#define sz(x) long long(x.size())



using ll = long long;

using vi = vector<int>;

using vvi = vector<vi>;

using vll = vector<ll>;

using vvll = vector<vll>;

using pii = pair<int, int>;

using pll = pair<ll, ll>;

using vs = vector<string>;

using vpll = vector<pair<ll, ll>>;

using vtp = vector<tuple<ll,ll,ll>>;

using vb = vector<bool>;



template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }

template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }



const ll INF = 1e9;

const ll MOD = 1e9+7;

const ll LINF = 1e18;







signed main()

{

  cin.tie( 0 ); ios::sync_with_stdio( false );

  

  ll n,k; cin>>n>>k;

  ll ans=0;

  ireps(i,k,n+1){

    ll l=i*(i-1)/2;

    ll r=n*(n+1)/2-(n-i+1)*(n-i)/2;

    // cout<<l<<" "<<r<<endl;

    ans+=(r-l+1)%MOD;

    ans=(ans+MOD)%MOD;

  }

  cout<<ans<<endl;

 }

// Fastest known solution for this problem: