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

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

#define rep1(i,n) for(ll i=1; i<=(n); ++i)

#define repi(i,a,b) for(ll i=a; i<=(b); ++i)

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

#define ITR(itr,mp) for(auto itr = (mp).begin(); itr != (mp).end(); ++itr)

#define ALL(obj) (obj).begin(), (obj).end()

#define RALL(obj) (obj).rbegin(), (obj).rend()

#define pb push_back

#define mp make_pair

#define to_s to_string

#define sz(v) (int)v.size()

#define UNIQUE(v) v.erase( unique(v.begin(), v.end()), v.end() )

#define print(x) cout<<(x)<<'\n'

#define debug(x) cout << #x << ": " << (x) << '\n'

using namespace std;

using ll = long long;

using Edge = pair<ll,ll>;

using Graph = vector<vector<Edge>>;

typedef pair<ll,ll> P;

struct aaa{aaa(){ cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(20);};}aaaaaaa;

ll MOD = 1e9 + 7;

ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}

ll lcm(ll a,ll b){return (a*b)/gcd(a,b);}

ll devc(ll x, ll y){return 1 + (x-1)/y;}

ll modpow(ll x, ll y, ll m) {

    if (y == 0) return 1;

    ll res = modpow(x, y / 2, m);

    return res * res % m * (y & 1 ? x : 1) % m;

}

ll modinv(ll x) { return modpow(x, MOD - 2, MOD); }



ll func(ll N, ll x){

    ll s = 1,t = 1;

    rep1(i,x){

        s *= (N-i+1) % MOD;

        t *= i % MOD;

        s %= MOD;

        t %= MOD;

    }

    return (s * modinv(t)) % MOD;

}





int main(){

    ll N,a,b; cin >> N >> a >> b;

    ll ans = modpow(2,N,MOD);

    ans += MOD - 1;

    ans %= MOD;

    

    ans += MOD - func(N,a);

    ans %= MOD;

    

    ans += MOD -func(N,b);

    ans %= MOD;

    

    print(ans);

    

    return 0;

}

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

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

#define rep1(i, n) for (ll i = 1; i <= (n); ++i)

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

#define ALL(obj) (obj).begin(), (obj).end()

#define pb push_back

#define to_s to_string

#define len(v) (int)v.size()

#define UNIQUE(v) v.erase(unique(v.begin(), v.end()), v.end())

#define print(x) cout << (x) << '\n'

#define debug(x) cout << #x << ": " << (x) << '\n'

using namespace std;

using ll = long long;

typedef pair<ll, ll> P;

ll MOD = 1e9 + 7;

ll devc(ll x, ll y) { return 1 + (x - 1) / y; }



//modでの累乗(繰り返し二乗法)

ll modpow(ll x, ll y, ll m)

{

    if (y == 0)

        return 1;

    ll res = modpow(x, y / 2, m);

    return res * res % m * (y & 1 ? x : 1) % m;

}



//modでの割り算

ll modinv(ll x, ll m) { return modpow(x, m - 2, m); }



//modでの安全な引き算

ll modsub(ll x, ll y, ll m){ return(x + m - y) % m; }



//二項係数を求める

ll binom(ll n, ll k, ll m)

{

    ll den = 1, num = 1;

    for (int i = 1; i <= k; ++i){

        den *= i;

        num *= (n + 1 - i);

        den %= m;

        num %= m;

    }

    return num * modinv(den,m);

}



int main()

{

    cin.tie(0);

    ios::sync_with_stdio(0);

    cout << fixed << setprecision(20);



    ll n, a, b;

    cin >> n >> a >> b;



    ll ans = modpow(2, n, MOD);

    ans = modsub(ans, binom(n, a, MOD), MOD);

    ans = modsub(ans, binom(n, b, MOD), MOD);

    ans = modsub(ans, 1, MOD);



    print(ans);



    return 0;

}

// Fastest known solution for this problem: