#include <bits/stdc++.h>
using namespace std;

template<typename T>
istream& operator >> (istream& istr, vector<T>& v){
    for(T& x: v) istr >> x;
    return istr;
}

template<typename T, typename U>
istream& operator >> (istream& istr, pair<T,U>& p){
    istr >> p.first >> p.second;
    return istr;
}

template<typename T>
ostream& operator << (ostream& ostr, vector<T>& v){
    if(!v.empty()){
        ostr << v.front();
        for(auto itr = ++v.begin(); itr != v.end(); itr++)
            // ostr << *itr;
            ostr << " " << *itr;
    }
    return ostr;
}

template<typename T, typename U>
ostream& operator << (ostream& ostr, pair<T,U>& p){
    // ostr << p.first << p.second;
    ostr << p.first << ", " << p.second;
    return ostr;
}

template<typename T>
ostream& operator << (ostream& ostr, vector<vector<T>>& vv){
    if(!vv.empty()){
        ostr << vv.front();
        for(auto itr = ++vv.begin(); itr != vv.end(); itr++)
            ostr << endl << *itr;
    }
    return ostr;
}

template<typename T, typename U>
ostream& operator << (ostream& ostr, vector<pair<T,U>>& vp){
    if(!vp.empty()){
        ostr << vp.front();
        for(auto itr = ++vp.begin(); itr != vp.end(); itr++)
            ostr << endl << *itr;
    }
    return ostr;
}

typedef long long ll;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<double> vd;
// vll x(n); x[i]=a;
typedef vector<vll> vvll;
typedef vector<vc> vvc;
typedef vector<vd> vvd;
// vvll x(m,vi(n)); x[i][j]=a;
typedef pair<ll,ll> pll;
typedef pair<double,double> pd;
typedef vector<pll> vpll;
typedef vector<pd> vpd;
// vpll x(n); x[i]={a,b}; x[i].first/second;

#define PI 3.1415926535897932
#define EPS 1e-12
#define INF (ll)1e+12
#define REP(i,n) for(ll i=0; i<(n); i++)
#define RREP(i,n) for(ll i=(n)-1; i>=0; i--)
#define FOR(i,a,b) for(ll i=(a); i<(b); i++)
#define FORR(i,a,b) for(ll i=(b)-1; i>=(a); i--)
#define fix(x) cout << fixed << setprecision(x)
#define dump(x) cout << #x << " = " << (x) << endl
#define all(x) (x).begin(),(x).end()

template<typename T> T sum(vector<T> &v) {return accumulate(all(v), (T)0LL);}
template<typename T> void sort(vector<T> &v){sort(all(v));}
template<typename T> void rsort(vector<T> &v){sort(all(v),greater<T>());}

// 拡張ユーグリッド互除法
ll extgcd(ll a, ll b, ll &x, ll &y){
    if (b == 0){
        x = 1;
        y = 0;
        return a;
    }
    ll g = extgcd(b, a%b, y, x);
    y -= a/b * x;
    return g;
}

ll gcd(ll a, ll b){
    ll x, y;
    return extgcd(a, b, x, y);
}

// 逆元(mod p)
ll modinv(ll a, ll p){
    ll x, y;
    extgcd(a, p, x, y);
    if (x<0) x += p;
    return x;
}

// 二項係数
#define MAX ((ll)2e5)
#define MOD ((ll)1e9+7)
ll fac[MAX+1];
ll finv[MAX+1];

void nCr_init(ll max, ll mod){
    fac[0] = 1;
    finv[0] = 1;
    REP(i, max){ // i=1->max+1 => 0->max
        fac[i+1] = fac[i] * (i+1) % mod;
        finv[i+1] = finv[i] * modinv(i+1, mod) % mod;
    }
}

ll nCr(ll n, ll r, ll mod){
    ll ans = 1;
    if (n < r || n < 0 || r < 0) return 0;
    // return fac[n] * (finv[r] * finv[n-r] % mod) % mod;
    for(ll i=n; i>n-r; i--) ans = ans*i%mod;
    ans = ans * finv[r] % mod;
    return ans;
}

ll pow2(ll n, ll mod){
    ll tmp=1, ans=1;
    REP(i,30) tmp*=2;
    tmp %= mod;
    REP(i,n/30) ans = ans*tmp%mod;
    REP(i,n%30) ans = ans*2%mod;
    return ans;
}

int main(){
    ll n, a, b, ans=1;
    cin >> n >> a >> b;

    nCr_init(MAX, MOD);

    ans = pow2(n,MOD);
    ans -= 1;
    ans -= nCr(n,a,MOD);
    ans -= nCr(n,b,MOD);

    while(ans<0) ans+=MOD;
    cout << ans << endl;

    return 0;
}


Measured memory_bytes: 3328