Try something like this:
In[126]:= ClearAll@f;
Attributes[f] = HoldAll;
f[x__] := Module[{list = Hold @ Unevaluated @ x},
Print["there are ", Length @ Unevaluated @ x, " arguments in total"];
Print["this is the first argument: ", Part[list, {1}, 1]];
Print["this is the evaluated first argument: ",
ReleaseHold[Part[list, {1}, 1]]
];
Print["this is the third argument: ", Part[list, {1}, 3]];
Print["this is the evaluated third argument: ",
ReleaseHold[Part[list, {1}, 3]]
];
foo
]
In[129]:= f[2 + 1, 2, Echo@3, 4]
During evaluation of In[129]:= there are 4 arguments in total
During evaluation of In[129]:= this is the first argument: Hold[2+1]
During evaluation of In[129]:= this is the evaluated first argument: 3
During evaluation of In[129]:= this is the third argument: Hold[Echo[3]]
(*echoing: 3*)
During evaluation of In[129]:= this is the evaluated third argument: 3
Out[129]= foo