#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cstring>
#include <map>
#include <queue>
#include <cmath>
#include <complex> // complex<double> a(1.2 , 2.3);// real(): 1.2, imag()2.3
using namespace std;

#define MOD 1000000007
#define EPS 1e-10
#define ll long long
#define ld long double
#define FOR(i,a,b) for(ll i=(ll)a;i<(ll)b;i++)
#define rep(i,n) FOR(i,0,n)
#define pb push_back
#define mp make_pair
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define rmsame(a) sort(all(a)),a.erase(unique(all(a)), a.end())
#define rmvector(a,b) rep(i,a.size())rep(j,b.size())if(a[i]==b[j]){a.erase(a.begin()+i);i--;break;}
#define first_more_idx(ve, num) upper_bound(all(ve), num)-ve.begin() // idx = first_more_idx(ve,num); if(idx = ve.size()) , then not exist
#define first_lessequal_idx(ve, num) lower_bound(all(ve), num)-ve.begin()
#define pq_pair_tB priority_queue <pair<ll,ll>, vector<pair<ll,ll> > , greater<pair<ll,ll> > >
#define pq_pair_ts priority_queue <pair<ll,ll> > // only sort first param
template<typename X> bool exist(vector<X> vec, X item){return find(all(vec), item)!=vec.end();}
ll gcd(ll a, ll b){if(b==0)return a;return gcd(b,a%b);}
ll lcm(ll a, ll b){return a/gcd(a,b)*b;}
ll power(ll x, ll n){if(n == 0) return 1;return  (n%2)? x*power(x, n-1)%MOD : power(x*x%MOD, n/2);}
ll dx[]={0, 0, -1, 1};
ll dy[]={1, -1, 0, 0};// up,down,left right

struct Combinations {
    
    long long mod;
    vector< long long > inv;
    vector< long long > fact;
    vector< long long > inv_fact;
    
    Combinations (int n, int m) : inv(n), fact(n), inv_fact(n), mod(m) {
        inv[1] = 1;
        for (long long i = 2; i < n; i++) {
            inv[i] = inv[mod%i] * (mod - mod / i) % mod;
        }
        fact[0] = inv_fact[0] = 1;
        for (long long i = 1; i < n; i++) {
            fact[i] = (fact[i-1] * i) % mod;
            inv_fact[i] = (inv_fact[i-1] * inv[i]) % mod;
        }
    }
    
    long long nPr(long long n, long long r) {
        if (n < r || r < 0) return 0;
        return fact[n] * inv_fact[n-r] % mod;
    }
    
    long long nCr(long long n, long long r) {
        if (n < r || r < 0) return 0;
        return nPr(n,r) * inv_fact[r] % mod;
    }
    
    long long nHr(long long n, long long r) {
        return nCr(n+r-1,r);
    }
    
    ll inv_fa(ll n) {
        return inv_fact[n];
    }
    
};
/*
 usage:
 O(N);
 Combination C(N,inf);//Nまでの全てのcombination, %inf;
 C.nCr(a,b); // aCbの値
 C.nPr,  C.nHrなどもある
 */

Combinations C(212345, MOD);
ll N ;
ll a, b ;


ll NCn(ll number){
    ll ans = 1;
    
    for(int i = 0; i < number; i++){
        ans *= (N-i);
        ans %= MOD;
    }
    
    ans *= C.inv_fa(number);
    ans %= MOD;
    
    return ans;
}

// カンニング? https://izu-mix.com/math/?p=964

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    cin >> N >> a >> b ;
    
    
    
    ll ans = power(2, N) - 1;
    if(ans <= 0) ans += MOD;
    
    // nCr
    
    ans -= NCn(a);
    ans -= NCn(b);
    
    if(ans < 0) ans += MOD;
    if(ans < 0) ans += MOD;
    if(ans < 0) ans += MOD;
    
    cout << ans << endl;

    //cout << fixed << setprecision(16) << ans << endl;
    return 0;
}


Measured memory_bytes: 5880