
def s0():return input()
def s1():return input().split()
def s2(n):return [input() for x in range(n)]
def s3(n):return [input().split() for _ in range(n)]
def s4(n):return [[x for x in s] for s in s2(n)]
def n0():return int(input())
def n1():return [int(x) for x in input().split()]
def n2(n):return [int(input()) for _ in range(n)]
def n3(n):return [[int(x) for x in input().split()] for _ in range(n)]
def t3(n):return [tuple(int(x) for x in input().split()) for _ in range(n)]
def p0(b,yes="Yes",no="No"): print(yes if b else no)
# from sys import setrecursionlimit
# setrecursionlimit(1000000)
# from collections import Counter,deque,defaultdict
# import itertools
# import math
# import networkx as nx
# from bisect import bisect_left,bisect_right
# from heapq import heapify,heappush,heappop
n,a,b=n1()

def comb(n,k):
    nCk = 1
    MOD = 10**9+7

    for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

    for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
    return nCk

MOD = 10**9+7
a1=comb(n, a)
b1=comb(n, b)
ans=pow(2,n,MOD)-a1-b1-1
print(ans%MOD) def s0():return input() s0 def s1():return input().split() s1 input() for x in range(n) for x in range(n) x range(n) range n for x in range(n) input() input def s2(n):return [input() for x in range(n)] s2 n n input().split() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) input().split() ().split () input split def s3(n):return [input().split() for _ in range(n)] s3 n n [x for x in s] for s in s2(n) for s in s2(n) s s2(n) s2 n for s in s2(n) [x for x in s] def s4(n):return [[x for x in s] for s in s2(n)] s4 n n def n0():return int(input()) n0 int(x) for x in input().split() for x in input().split() x input().split() ().split () input split for x in input().split() int(x) int x def n1():return [int(x) for x in input().split()] n1 int(input()) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) int(input()) int input() input def n2(n):return [int(input()) for _ in range(n)] n2 n n [int(x) for x in input().split()] for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) [int(x) for x in input().split()] def n3(n):return [[int(x) for x in input().split()] for _ in range(n)] n3 n n tuple(int(x) for x in input().split()) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) tuple(int(x) for x in input().split()) tuple int(x) int x def t3(n):return [tuple(int(x) for x in input().split()) for _ in range(n)] t3 n n def p0(b,yes="Yes",no="No"): print(yes if b else no)
# from sys import setrecursionlimit
# setrecursionlimit(1000000)
# from collections import Counter,deque,defaultdict
# import itertools
# import math
# import networkx as nx
# from bisect import bisect_left,bisect_right
# from heapq import heapify,heappush,heappop p0 b b yes="Yes" yes "Yes" no="No" no "No" n,a,b=n1() n n1() n1 a b def comb(n,k):
    nCk = 1
    MOD = 10**9+7

    for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

    for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
    return nCk comb nCk = 1 nCk 1 MOD = 10**9+7 MOD 10**9+7 10**9 10 9 7 for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

     i range(n-k+1, n+1) range n-k+1 n-k n k 1 n+1 n 1 nCk *= i nCk i nCk %= MOD nCk MOD for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
     i range(1,k+1) range 1 k+1 k 1 nCk *= pow(i,MOD-2,MOD) nCk pow(i,MOD-2,MOD) pow i MOD-2 MOD 2 MOD nCk %= MOD nCk MOD return nCk nCk n n k k MOD = 10**9+7 MOD 10**9+7 10**9 10 9 7 a1=comb(n, a) a1 comb(n, a) comb n a b1=comb(n, b) b1 comb(n, b) comb n b ans=pow(2,n,MOD)-a1-b1-1 ans pow(2,n,MOD)-a1-b1-1 pow(2,n,MOD)-a1-b1 pow(2,n,MOD)-a1 pow(2,n,MOD) pow 2 n MOD a1 b1 1 print(ans%MOD) print ans%MOD ans MOD def n2(n):return [int(input()) for _ in range(n)] def n2(n):return [int(input()) for _ in range(n)] n2 a,b=n1() n1() a def s3(n):return [input().split() for _ in range(n)] def s3(n):return [input().split() for _ in range(n)] s3 def s4(n):return [[x for x in s] for s in s2(n)] def s4(n):return [[x for x in s] for s in s2(n)] s4 def s2(n):return [input() for x in range(n)] def s2(n):return [input() for x in range(n)] s2 def p0(b,yes="Yes",no="No"): print(yes if b else no)
# from sys import setrecursionlimit
# setrecursionlimit(1000000)
# from collections import Counter,deque,defaultdict
# import itertools
# import math
# import networkx as nx
# from bisect import bisect_left,bisect_right
# from heapq import heapify,heappush,heappop def p0(b,yes="Yes",no="No"): print(yes if b else no)
# from sys import setrecursionlimit
# setrecursionlimit(1000000)
# from collections import Counter,deque,defaultdict
# import itertools
# import math
# import networkx as nx
# from bisect import bisect_left,bisect_right
# from heapq import heapify,heappush,heappop p0 ans=pow(2,n,MOD)-a1-b1-1 pow(2,n,MOD)-a1-b1-1 ans b=n1() n1() b b1=comb(n, b) comb(n, b) b1 def t3(n):return [tuple(int(x) for x in input().split()) for _ in range(n)] def t3(n):return [tuple(int(x) for x in input().split()) for _ in range(n)] t3 def comb(n,k):
    nCk = 1
    MOD = 10**9+7

    for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

    for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
    return nCk def comb(n,k):
    nCk = 1
    MOD = 10**9+7

    for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

    for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
    return nCk comb def s0():return input() def s0():return input() s0 MOD = 10**9+7 10**9+7 MOD n,a,b=n1() n1() n def n0():return int(input()) def n0():return int(input()) n0 def n1():return [int(x) for x in input().split()] def n1():return [int(x) for x in input().split()] n1 a1=comb(n, a) comb(n, a) a1 def s1():return input().split() def s1():return input().split() s1 def n3(n):return [[int(x) for x in input().split()] for _ in range(n)] def n3(n):return [[int(x) for x in input().split()] for _ in range(n)] n3

def s0():return input()
def s1():return input().split()
def s2(n):return [input() for x in range(n)]
def s3(n):return [input().split() for _ in range(n)]
def s4(n):return [[x for x in s] for s in s2(n)]
def n0():return int(input())
def n1():return [int(x) for x in input().split()]
def n2(n):return [int(input()) for _ in range(n)]
def n3(n):return [[int(x) for x in input().split()] for _ in range(n)]
def t3(n):return [tuple(int(x) for x in input().split()) for _ in range(n)]
def p0(b,yes="Yes",no="No"): print(yes if b else no)
# from sys import setrecursionlimit
# setrecursionlimit(1000000)
# from collections import Counter,deque,defaultdict
# import itertools
# import math
# import networkx as nx
# from bisect import bisect_left,bisect_right
# from heapq import heapify,heappush,heappop
n,a,b=n1()

def comb(n,k):
    nCk = 1
    MOD = 10**9+7

    for i in range(n-k+1, n+1):
        nCk *= i
        nCk %= MOD

    for i in range(1,k+1):
        nCk *= pow(i,MOD-2,MOD)
        nCk %= MOD
    return nCk

MOD = 10**9+7
a1=comb(n, a)
b1=comb(n, b)
ans=pow(2,n,MOD)-a1-b1-1
print(ans%MOD)