Here are your topology and bones:
I think that:
- You need to put the Armature modifier above the Subdivision Surface, and also activate the Preserve Volume option of the Armature modifier.
- You need to make sure that the head and tail of your bones match the joints
- You need more topology around the joints so that they bend smoothly, so bevel the joints:
- At last you need to assign the vertices to the good vertex groups. You probably need to do it manually because parenting With Automatic Weights will mess up for such a complicated part, so select the vertices, go into the Object Data panel > Vertex Groups, select the correct group, click on Assign. It should give something like that at the end:
I've given a Copy Rotation constraint to the second and third phalanx bone so that you just need to rotate the first one to make the others bend. Also you could segment each phalanx bone so that they bend more roundly.