#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mk make_pair
#define rint register int
using namespace std;
const int mod = 1e9+7;
inline int read(){int w=1,s=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}while(isdigit(ch)){s=s*10+ch-'0';ch=getchar();}return w*s;}
ll n;
typedef pair<int,int> pa;
map<pa,int> mp;
inline int add(int a,int b){a+=b;if(a>=mod) a-=mod;return a;}
inline int DFS(ll a,ll b){
	if(b<0) return 0;
	if(b==0) return 1;
	if(mp.count(mk(a,b))) return mp[mk(a,b)];
	int res=0;
	res=add(res,DFS(a>>1,b>>1));
	res=add(res,DFS((a-1)>>1,(b-1)>>1));
	if(b>=2) res=add(res,DFS(a>>1,(b-2)>>1));
	return mp[mk(a,b)]=res;
}
int main()
{
	cin>>n;
	cout<<DFS(n,n);
	return 0;
}