This study formulates a finite element algorithm for frictional contact of solid materials, accommodating finite deformation and sliding. The algorithm uses a penalty method regularized with an augmented Lagrangian scheme to enforce contact constraints in a nonmortar surface-to-surface approach. Use of a novel kinematical approach to contact detection and enforcement of frictional constraints allows solution of complex problems previously requiring mortar methods or contact smoothing algorithms. Patch tests are satisfied to a high degree of accuracy with a single-pass penalty method, ensuring formulation errors do not affect the solution. The accuracy of the implementation is verified with Hertzian contact, and illustrations demonstrating the ability to handle large deformations and sliding are presented and validated against prior literature. A biomechanically relevant example addressing finger friction during grasping demonstrates the utility of the proposed algorithm. The algorithm is implemented in the open source software febio, and the source code is made available to the general public.