For Join to join two surfaces the adjacent edges must be within the absolute tolerance distance of each other. Several of your pairs of adjacent edges are further apart.
You can try using MatchSrf with Position option. You will probably have to use the Refine match option. which will add more control points to your surfaces which is not desirable.
You can also use JoinEdge which will ignore the tolerance and force the surfaces to “join”. The edges of the individual surfaces will not be modified. Using JoinEdge can cause problems if the surfaces are used later, and should usually be avoided.
The best solution to your problem is to rebuild the model using surfaces which have control point structures which align between adjacent surfaces.
I just did a intersect command with the surfaces and as you can see, the surfaces do not fully intersect in various places.
Only the areas which have the curves(highlighted places) are within tolorance.
as @davidcockey says, matchsrf can help to pull the surfaces together, but may give unwanted results.
As for joinedge I learned it’s not a good idea to use unless you have no other way to go.
One other way is to dupedge and copy the edges of what you have now, and use match command to make sure those curves are connected. So when re-creating surfaces you have something that can you can refer to.