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

std::vector<int> v(61),w(61);
const int INF=1e9+7;
int dp[600000][50];
int dfs(int S,int X){
  if(S<600000&&S>=0&&X<=50&&X>=0)int &res=dp[S][X];
  else int res=-2;
  if(res==-1)return res;
  if(S<0){res=0;return res;}
  if(S>(v[X]-1)*2){res=w[X];return res;}
  if(S==0&&X==0){res=1;return res;}
  res=(dfs(S,X-1)+dfs(S-v[X-1],X-1)+dfs(S-v[X],X-1))%INF;return res;
}

signed main(){
  v[0]=1;for(int i=1;i<61;i++)v[i]=v[i-1]*2;
  w[0]=1;for(int i=1;i<61;i++)w[i]=w[i-1]*3;
  memset(dp,-1,sizeof(dp));
  int N;
  cin>>N;
  cout<<dfs(N,60)<<endl;
}
